引用: 引用相当于一个“别名”,也可以理解成一个指针,把它指向哪个对象,它就代表哪个对象。
创建一个引用只是相当于创建了一个很小的变量,这个变量保存了一个整数,这个整数表示内存中的一个地址
总结: 所谓的“引用”本质上只是存了一个地址,java将数组设定成引用类型,这样的话后续进行数组参数传参,其实只是将数组的地址传入到函数形参中。这样可以避免对这个数组的拷贝(数组可能比较长,那么拷贝开销就会很大。
null在java中表示“空引用”,也就是一个无效的引用。
- 局部变量和引用保存在栈上,new出的对象保存在堆上
- 类在java中属于引用类型。总的来说,类相当于一个模板,而对象是由模板产生的样本。一个类可以产生无数的对象。
java中引用和对象的关系:
例如:
String str = new String(“abc”);
引用是: str
对象是: new String(“abc”);
- java中new出来的对象存储在堆里,而str的值,就是str所引用的new String(“abc”); 对象所在堆中的地址。
- java中是通过引用来操作对象的。
例如:引用就是遥控器,对象就是电视机,换频道和音量的大小相当于是对象里的属性。
我们通过遥控器来操控电视机。这样就非常方便不必直接操控对象,而是通过遥控器这个引用,电视机在哪里我不用管,它现在音量大小,什么频道我也不用管。
我只要通过遥控器(引用),去操控电视机(对象),来达到我想要的效果即可。
- 一个引用只能指向一个对象,一个对象可以被多个引用指向。
例如:
Object a = new Object();
Object b = a;
Object c = b;
这个例子中只创建了一个对象,而它的引用有三个,甚至可以继续无限制的创建它的引用。
- 实际内存中创建的是一个对象。
在Java中对象实例存储在堆中,而引用在栈中。
当执行Object a = new Object();这条语句时,会在堆中给对象实例分配一块内存,在栈中给引用分配一块内存。然后让引用指向堆中的对象(栈中的引用存储的是对象的在堆中的地址)。
当执行Object b = a;时,只是在栈中增加了一个引用b,b指向堆中的对象(b存储对象的地址)。
所以不管增加几个对象的引用,都只创建了一个对象。
- 改变对象内容,其他引用指向这个对象的内容也会改变。
不管通过哪个引用改变对象内容,改变的都是堆中唯一的那个对象,所以其他引用指向的对象内容都变了。