java指针是什么意思
发布时间:2025-05-21 17:35:54 发布人:远客网络
一、java指针是什么意思
1、Java语言和C语言不同,Java没有指针的概念。Java中采用的是引用类型,它是一个对象的标识符,与指针的概念是有些类似的。引用类型类似于C语言中指针的概念,它们都是指向内存中某个地址的值。但是Java的引用类型和C指针有很大的区别,Java的引用类型是一种安全的类型,不容易出现因指针操纵而导致的内存泄露和系统崩溃等问题。
2、在C语言中,指针是一种强大的工具,可以直接访问内存地址中的数据,从而对数据进行操作。指针具有高效、灵活、可操纵等特点,但也存在一些问题。指针操作需要程序员对内存的理解和掌握,一旦程序出现指针错误,很容易造成严重的后果。而Java中没有指针的概念,可以避免这类问题。
3、Java在设计时就考虑到了安全性和可靠性问题,因此没有引入指针这种高级特性。Java的设计理念是为了尽可能减少程序员的错误,将复杂性隐藏在语言背后,使程序员能够更集中精力于应用开发。在Java中,使用引用类型代替指针,对于程序员来说,可以更加方便地对对象进行操作,同时也增强了程序的安全性和可维护性。
二、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();
4、将指针指向另外一个对象:Person*p1= new Person…; p= p1;但,不可以*p= p1这样来赋值。
这么多已经足够了,接下来看看java引用能做什么操作。
a、指向一个对象,如Person p= new Person…
b、调用对象的方法,p.getAge();
c、指向另外一个对象,Person p1= new Person…; p= p1;
对于a和1,他们的功能是类似的,但java引用无法指向一个基本变量。。
对于b,java引用和指针就不同了,在这点上,Java reference更像是解引用(dereference)了的指针;或者说java中的.操作符某种程度上等价于指针的->操作符,如果是这样种解释的话,我们无法再对java的reference解引用了。
除此,我们无法获取java引用存的地址,我们不能delete,还有很多……
综上,窃以为java的引用可以看成是一个功能受限的指针(或者说被阉割的指针)。另一方面,功能如此受限,它还能叫指针吗?了解了指针和java引用的区别与联系,还需要纠结“java中有没有指针”这个问题吗!
三、java里的指针和c++指针的区别
类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。
2.所占内存:引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。
3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的!
4.初始值:引用初始值为java关键字null。C++指针是INT,如不初始化指针,那他的值就不是固定的了。
5.计算:引用是不可以计算的。C++指针是INT,所以他可以计算,所以经常用指针来代替数组下标。
6.控制:引用不可以计算,所以他只能在自己程序里,可以被控制。C++指针是内存地址,也可以计算,所以他有可能指向了一个不归自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的。
7.内存泄露:JAVA引用不会产生内存泄露。C++指针是容易产生内存泄露的,所以程序员要小心使用,及时回收。
8.作为参数:JAVA的方法参数只是传值,引用做为参数使用时候,回给函数内引用的值的COPY,所以在函数内交换两个引用参数是没意义的,因为
函数只交换的参数的COPY值,但在函数内改变一个引用参数的属性是有意义的,因为引用参数的COPY所引用的对象是和引用参数是同一个对象。
C++指针做为参数给函数使用,实际上就是他所指的地址在被函数操作,所以函数内用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数,等
9.操作符和声明:java里用"."。C++指针用"->"用"*"声明指针。(似乎这条没什么用!)
10.本质:java中的引用和C++中的指针本质上都是想通过一个叫做引用或者指针的东西,找到要操作的目标(变量对象等),方便在程序里操作。所不同的是JAVA的办法更安全,方便些,但没有了C++的灵活,高效。
java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比。但在我们写
JAVA程序的时候最好忘记C++的指针,写C++程序的时候,也不要老惦记着JAVA的引用。只要记得
引用无大小,安全,不可计算,强转时要小心就好了。