1.什么是Java对象?
学Java的人可能听过这样一句话:万物皆对象。通俗点来讲就是:java对象就是一类事物的抽象化,然后这个对象有自己的状态,行为和标识等,再说白点就是这对象有自己的一些特征以及它可以干点啥。
2.什么是Java对象引用?
说到这个,我们就需要先说一下C语言中的指针,它可以直接操作内存,java中的对象引用是和C和C++中的指针是比较像的,但是也只是比较像而已,有人觉得java中的对象引用其实就是一个指针,但是实际上,java中的对象引用和C++中的引用在语法上更加接近,但是java中的这个对象引用和C++中的引用还是存在巨大的差别。
3.实例
特别注意:Java中的String一旦创建,是不可变的!!!!
例:
这个告诉我们需要记住一个点:如果两个引用指向同一个对象,那么不管哪个引用去改变这个对象,其结果是对象的内容都会发生改变,而且只有一个对象,但是记住了String是一个特例!!!
4.java对象的创建与C++对象创建的区别
在Java中:
在C++中:
在 Java 中,只有当你使用 new 操作符时,才会真正在内存中申请一块空间,创建一个新对象,并将该对象绑定到你所定义的变量名上。其它情况下,要么是将已有对象绑定到某个变量名上,要么就是定义的变量名是个空引用,没有绑定任何对象。
而在C++中,当你定义了一个变量 s 时,即使你没有给它赋值,也意味着你不但创建了一个新的标识符,同时还在栈中申请了对应的内存空间。因此,C++ 中定义的变量名不仅仅是个标识符,还自动关联着栈中的一块内存空间。而 C++ 中的 new 操作符表示的是在堆中申请内存,因为栈中的内存在运行时期大小是固定且有限的,因此需要动态内存分配的时候就需要用 new 来实现。
总结而言,Java 中的变量名仅仅是一个用于引用内存中实际对象的标识符,如果你没给它关联对象,它就为空引用。而 C++ 中的变量名(非指针类型),虽然也是标识符,但却始终关联着实际的内存空间,当我们看到一个变量(非指针类型)时,就知道它代表着一块实际的内存空间。