版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
随着工作的深入,越发需要重新梳理一遍Java知识点,本系列是重新学习Java所写。
首先需要明白以下几点:
分别是Student、Computer、Test,代码如下:
public class Student {int score;int age;String name;Computer computer;public void study() {System.out.println(");}
}
public class Student {
int score;
int age;
String name;
Computer computer;
public void study() {
System.out.println(");
}
}
public class Computer {int price;String brand;
}
public class Test {public static void main(String[] args) {Student stu = new Student();stu.name = "xiaoming";stu.age = 10;stu.study();Computer c = new Computer();c.brand = "Hasse";System.out.println(c.brand);stuputer = c;System.out.println(stuputer.brand);// System.out.println("----------------------------------------");
//
// c.brand = "Dell";
//
// System.out.println(c.brand);
// System.out.println(stuputer.brand);
//
// System.out.println(stuputer.brand == c.brand);}}
————————————————
版权声明:本文为CSDN博主「刘金宝_Arvin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:
我们知道,程序的入口是main(),因而从main方法从上到下、从左到右进行分析。
①首先,Java虚拟机(JVM)去方法区寻找是否有Test类的代码信息,如果存在,直接调用。如果没有,通过类加载器(ClassLoader)把.class字节码加载到内存中,并把静态变量和方法、常量池加载(“xiaoming”、“Hasse”)。
②走到Student,以同样的逻辑对Student类进行加载;静态成员;常量池(“studying”)。
③走到stu,stu在main方法内部,因而是局部变量,存放在栈空间中。
④走到new Student,new出的对象(实例),存放在堆空间中,以方法区的类信息为模板创建实例。
⑤‘’=‘’赋值操作,把new Student的地址告诉stu变量,stu通过四字节的地址(十六进制),引用该实例。
如下图:
⑥stu通过引用new Student实例的name属性,该name属性通过地址指向常量池的"xiaoming"敞亮。
⑦s实例的age属性是基本数据类型,基本数据类型直接赋值。
⑧调用实例的方法时,并不会在实例对象中生成一个新的方法,而是通过地址指向方法区中类信息的方法。
⑥⑦⑧的过程如下图:
同stu变量的生成过程。
同stu.name = "xiaoming"过程。
⑨把c对象对Computer实例的引用赋值给Student实例的computer属性。亦即:该Student实例的computer属性指向该Computer类的实例。
如下图:
为进一步理解,我们把注释内容去掉:
⑨重新将Computer实例的brand属性指向"Dell"常量,那stuputer.brand指向谁呢?Dell还是Hasse?
c.brand = "Dell";
根据刚才的分析可知:
stu通过地址引用Student实例,而该实例的computer的指向和c的指向是同一个Computer实例,因而改变该Computer实例的brand属性的指向,两者都会改变。
举个例子:
访问大明,和访问大明的儿子的爸爸,实质上访问的是同一个对象:大明。
因而,最终的结果是true。
下面我们添加新的代码,如下:
String str = "Dell";System.out.println(c.brand == str);
结果会如何呢?
根据常量池具有共享性,可知并不会生成新的常量"Dell",而是会把str通过地址指向原来的"Dell",因而结果是true。
本文发布于:2024-02-02 07:49:59,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170683140042388.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |