引用和对象的关系

java的引用和对象的关系。
例如下面这句代码

String str = new String("abc");

引用是:str
对象是 :new String(“abc”);

java中new出来的对象存储在堆里,而str的值,就是str所引用的new String(“abc”);对象所在堆中的地址。
java中是通过引用来操作对象的。
举个例子,引用就是遥控器,对象就是电视机,换频道和音量的大小相当于是对象里的属性。
于是我们通过遥控器来操控电视机。这样就非常方便不必直接操控对象,而是通过遥控器这个引用,电视机在哪里我不用管,它现在音量大小,什么频道我也不用管
我只要通过遥控器(引用),去操控电视机(对象),来达到我想要的效果即可。

再看一个代码
有一个类Student

class Student{
    int age;  
    char gender;
}
Student s1 = new Student();
Student s2 = new Student();

s1.age =17;
s2.age=71;
System.out.printLn("s1"+s1.age+"==="+"s2"+s2.age ); // 结果1: 17  71

s1 = s2;
System.out.printLn("s1"+s1.age+"==="+"s2"+s2.age ); // 结果2:71 71

结果1就不解释了,下面解释一下结果2
结果2:Student s1 = new Student(); // 假设此时(new Student();)的地址为:xxxx1
Student s1 = new Student(); // 假设此时(new Student();)的地址为:xxxx2
但是s1=s2;这就代表着,将s2的地址值赋值给了s1,于是s1就不在指向原来的student了,它就指向s2所指向的对象了,即s1(引用)的值为xxxx2,即s1与s2指向同一个对象,于是不管是s1还是s2,只要有一个操控,那么相应的对象的属性都会改变。就好比两个遥控器(引用)都同时操控一个电视机,那么不管是谁操作,那么电视机(对象)的状态都会改变。至于第一个地址值为xxxx1的对象,java的垃圾回收机制会在适当的时侯将其回收掉。

你可能感兴趣的:(Java编程思想)