首页编程java编程java为什么不存在指针?面试题,java为什么没有指针

java为什么不存在指针?面试题,java为什么没有指针

编程之家2023-10-1192次浏览

各位老铁们好,相信很多人对java为什么不存在指针都不是特别的了解,因此呢,今天就来为大家分享下关于java为什么不存在指针以及面试题,java为什么没有指针的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

java为什么不存在指针?面试题,java为什么没有指针

Java语言没有指针,怎样实现链表

Java语言中的对象引用实际上是一个指针(这里的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。

程序代码:

classNode

java为什么不存在指针?面试题,java为什么没有指针

{

Objectdata;

Nodenext;//指向下一个结点

java为什么不存在指针?面试题,java为什么没有指针

}

将数据域定义成Object类是因为Object类是广义超类,任何类对象都可以给其赋值,增加了代码的通用性。为了使链表可以被访问还需要定义一个表头,表头必须包含指向第一个结点的指针和指向当前结点的指针。为了便于在链表尾部增加结点,还可以增加一指向链表尾部的指针,另外还可以用一个域来表示链表的大小,当调用者想得到链表的大小时,不必遍历整个链表。

链表的数据结构我们可以用类List来实现链表结构,用变量Head、Tail、Length、Pointer来实现表头。存储当前结点的指针时有一定的技巧,Pointer并非存储指向当前结点的指针,而是存储指向它的前趋结点的指针,当其值为null时表示当前结点是第一个结点,因为当删除当前结点后仍需保证剩下的结点构成链表,如果Pointer指向当前结点,则会给操作带来很大困难。如何得到当前结点呢?我们定义了一个方法cursor(),返回值是指向当前结点的指针。类List还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作。例如reset()方法使第一个结点成为当前结点。insert(Objectd)方法在当前结点前插入一个结点,并使其成为当前结点。remove()方法删除当前结点同时返回其内容,并使其后继结点成为当前结点,如果删除的是最后一个结点,则第一个结点变为当前结点。

链表类List的源代码如下:

packagecn.javatx;importjava.io.IOException;/**

*@authorljfan

*

*/

publicclassList{

privateNodeHead=null;

privateNodeTail=null;

privateNodePointer=null;

privateintLength=0;publicvoiddeleteAll(){

Head=null;

Tail=null;

Pointer=null;

Length=0;

}publicvoidreset(){

Pointer=null;

}publicbooleanisEmpty(){

return(Length==0);

}publicbooleanisEnd(){

if(Length==0)

thrownewjava.lang.NullPointerException();

elseif(Length==1)

returntrue;

else

return(cursor()==Tail);

}publicObjectnextNode(){

if(Length==1)

thrownewjava.util.NoSuchElementException();

elseif(Length==0)

thrownewjava.lang.NullPointerException();

else{

Nodetemp=cursor();

Pointer=temp;

if(temp!=Tail)

return(temp.next.data);

else

thrownewjava.util.NoSuchElementException();

}

}publicObjectcurrentNode(){

Nodetemp=cursor();

returntemp.data;

}publicvoidinsert(Objectd){

Nodee=newNode(d);

if(Length==0){

Tail=e;

Head=e;

}else{

Nodetemp=cursor();

e.next=temp;

if(Pointer==null)

Head=e;

else

Pointer.next=e;

}

Length++;

}publicintsize(){

return(Length);

}publicObjectremove(){

Objecttemp;

if(Length==0)

thrownewjava.util.NoSuchElementException();

elseif(Length==1){

temp=Head.data;

deleteAll();

}else{

Nodecur=cursor();

temp=cur.data;

if(cur==Head)

Head=cur.next;

elseif(cur==Tail){

Pointer.next=null;

Tail=Pointer;

reset();

}else

Pointer.next=cur.next;

Length--;

}

returntemp;

}privateNodecursor(){

if(Head==null)

thrownewjava.lang.NullPointerException();

elseif(Pointer==null)

returnHead;

else

returnPointer.next;

}publicstaticvoidmain(String[]args){

Lista=newList();

for(inti=1;i<=10;i++)

a.insert(newInteger(i));

System.out.println(a.currentNode());

while(!a.isEnd())

System.out.println(a.nextNode());

a.reset();

while(!a.isEnd()){

a.remove();

}

a.remove();

a.reset();

if(a.isEmpty())

System.out.println("ThereisnoNodeinListn");

System.out.println("Youcanpressreturntoquitn");

try{

System.in.read();

}catch(IOExceptione){

}

}

}classNode{

Objectdata;

Nodenext;Node(Objectd){

data=d;

next=null;

}

}

当然,双向链表基本操作的实现略有不同。链表和双向链表的实现方法,也可以用在堆栈和队列的现实中。

java中到底有没有指针

学过c/c++,然后学Java的人往往心中有此纠结,java中到底有没有指针?

如果一定要在是或否里选择一个,OK,java中没有指针。

那么,java中的引用(reference)和c/c++中的指针(如无特别说明,后文指针均指c/c++中的指针)究竟有着什么样纠葛不清的关系呢?

在开始之前先说一下c/c++的引用,它跟java的引用完全不是一个东西,c/c++的引用是同一块内存的不同名字。而java的引用是指向一个对象,引用本身也占用了内存。

首先,列举一下能对指针进行的一些常见操作:

1、指向一个对象,如 Person*p= new Person….;int*iv= new int….

2、对指针所指的对象进行操作:P->getAge();(*p).getAge();

3、获取存储在指针中的地址值。

4、将指针指向另外一个对象:Person*p1= new Person…; p= p1;但,不可以*p= p1这样来赋值。

5、删除new的空间,delete p1;

6、其它诸多操作

这么多已经足够了,接下来看看java引用能做什么操作。

a、指向一个对象,如Person p= new Person…

b、调用对象的方法,p.getAge();

c、指向另外一个对象,Person p1= new Person…; p= p1;

OK,就这么多了。

对于a和1,他们的功能是类似的,但java引用无法指向一个基本变量。。

对于b,java引用和指针就不同了,在这点上,Java reference更像是解引用(dereference)了的指针;或者说java中的.操作符某种程度上等价于指针的->操作符,如果是这样种解释的话,我们无法再对java的reference解引用了。

对c和4,是类同的。

除此,我们无法获取java引用存的地址,我们不能delete,还有很多……

综上,窃以为java的引用可以看成是一个功能受限的指针(或者说被阉割的指针)。另一方面,功能如此受限,它还能叫指针吗?了解了指针和java引用的区别与联系,还需要纠结“java中有没有指针”这个问题吗!

java为什么没有指针

1: java有指针,在java中称为引用。所谓的引用就是内存地址的值。拿到该引用就相当于得到了该内存处的对象。

2: java中可以使用指针(我们称之为引用),但不能修改引用。

如C++中可以进行pointer++;在java中是错误的。(Integer,Float等包装类除外,因为java有自动封箱、解箱特性)。

这就好比:在java中可以坐飞机到指定的目的地,但是你不能开飞机(安全)。但是在C++中可以自己开飞机(操作飞机)--具有危险性。

面试题,java为什么没有指针

1: java有指针,在java中称为引用。所谓的引用就是内存地址的值。拿到该引用就相当于得到了该内存处的对象。

2: java中可以使用指针(我们称之为引用),但不能修改引用。

如C++中可以进行pointer++;在java中是错误的。(Integer,Float等包装类除外,因为java有自动封箱、解箱特性)。

这就好比:在java中可以坐飞机到指定的目的地,但是你不能开飞机(安全)。但是在C++中可以自己开飞机(操作飞机)--具有危险性。

望采纳!

关于java为什么不存在指针和面试题,java为什么没有指针的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

java什么管理内存 java 的JVM虚拟内存是如何管理的啊。机票降价(机票降价了可以申请差价吗)