文章内容仅代表个人理解,如有错误欢迎到评论区指点,文章内容仅供参考——
相信有不少的大学生在简单的学习C语言后,想立刻找一门自己喜欢擅长的语言,来到这里那么恭喜你选择Java这门语言,在学习的过程中可能C语言的“指针”只简单了解了定义还没有完全搞懂,就来学习java,在学习java中“引用”又不是很理解,就简单的把“引用”当作“指针”,不过没关系,今天就带你理解透彻并熟练的掌握java中的“引用”以及“引用”与“指针”的区别。
初步了解什么是引用
先创建一个数组
int[] array = new int[3];
我们创建一个数组就会在堆内存中分配一块内存空间,然后返回该对象的引用。这里int[3]就是对象,可以假设堆中开辟的内存地址是09X,把09X返回给了array引用变量中,array现在就是一个引用。
这里就有小伙伴不明白了,在想这和C语言的“指针”有什么区别,举个例子如果array现在是一个指针类型,它是直接指向内存地址的,array就指向数组首元素的值“1”。在 Java 中,数组变量 array
并不直接保存数组第一个元素的值,而是保存了指向数组对象的引用(就是假设的09X)。
引用可以做什么
一、通过引用可以访问对象的成员变量和方法
1、我们可以用“.”调用方法
二、引用之间可以赋值和传递
1、我们可以将一个引用赋值给另一个引用变量,从而使两个引用变量指向同一个对象
这里就会有小伙伴之前理解是指针间相互指向,其实不是这样的。
2、也可以将一个引用作为参数传递给方法,以便在方法内部操作对象。
三、引用可以为 null
1、在Java中,引用可以被赋予 null
值,表示它不指向任何对象。这在需要表示对象不存在的情况下很有用
四、引用的生命周期
1、引用的生命周期与所引用的对象的生命周期无关。当没有任何引用指向一个对象时,该对象就会成为垃圾,等待被Java虚拟机的垃圾回收器回收。
这里还要扩展一下“引用”和“引用类型”
引用
1、在Java中,引用是一种特殊的数据类型,它用于存储对象的内存地址,从而允许程序通过引用来间接访问和操作内存中的对象。
2、通过引用,我们可以访问对象的成员变量和方法,并进行相应的操作。
3、引用本身并不包含对象的实际数据,它只是保存对象的地址。
引用类型
1、引用类型是Java中的一类数据类型,它们包括类、接口、数组等。与基本数据类型(如整型、浮点型)不同,引用类型是用来引用对象的。
2、使用引用类型定义的变量,实际上存储的是对象的引用而不是对象本身的数据。这些变量可以指向对象,也可以为 null,但它们本身不存储对象的实际数据。
3、引用类型的变量需要通过 new
关键字显式创建对象,然后将对象的引用赋给变量
最后讨论一下java中真的没有指针么?
经过我查找资料和翻阅书籍总结:
在 Java 中,虽然没有显式指针的概念,但是实际上在内部仍然存在指针的概念,只是 Java 对指针进行了封装和限制。具体来说:
-
引用类型:在 Java 中,几乎所有的数据类型都是通过引用来访问的,而不是直接访问内存地址。在 Java 中,对象变量并不是存储对象本身,而是存储对象的引用(reference),这个引用指向对象在堆内存中的实际位置。因此,可以说在 Java 中,对象引用就类似于指针,它指向了实际存储对象的内存地址。
-
指针限制:与传统的指针相比,Java 中的引用受到了很多限制,例如不允许直接访问内存地址、不允许进行指针算术运算等。这些限制帮助提高了程序的安全性和稳定性,避免了一些常见的指针相关错误(如空指针异常、越界访问等)。
-
指针操作:虽然Java中没有显式的指针操作,但是在底层的 Java 虚拟机中仍然会有指针操作的存在,只是这些操作对开发者是不可见的。Java 虚拟机会负责管理内存,包括对象的创建、销毁以及内存的回收,因此开发者不需要关心底层的指针操作。
总的来说,虽然在 Java 中没有显式的指针概念,但是通过引用类型,Java 实际上仍然在内部使用指针来引用对象。这种方式既保证了程序的安全性和稳定性,又隐藏了底层的指针操作,使得开发更加方便和高效。
经过学习想必你已经对“引用”和“指针”有了更深层次的理解!我会持续更新java相关内容,希望对你有所帮助。