public class JiBenHeYinYong {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "java";
show(s1,s2);
System.out.println(s1+"...."+s2);// hello java
/*基本数据类型:main、s1、s2进内存在栈中,show()方法进栈,无论对s1、s2
进行了任何操作,最后都会弹栈,也就是说show()方法运行完以后,在打印s1、s2
不会出现任何变化。*/
//----------------------------------------------------
StringBuilder s3 = new StringBuilder("hello");
StringBuilder s4 = new StringBuilder("java");
show_01(s3,s4);
System.out.println(s3+"......."+s4);//hellojava.......java
/*引用数据类型:main进栈内存,在堆内存中建立两个对象分别将两个地址值赋给s3、s4
* 两个对象初始化完毕以后分别被赋值"hello"、"java"。show_01()方法进栈,
* show()_01方法执行(详细过程见下区)以后在栈内存中消亡(栈中的持有地址值的s3、s4),
* 而此时s3持有的地址指向的堆内存中的对象的内容已经被show_01()方法变化
* 为"hellojava",此时的s4持有的地址指向的堆内存中的对象内容仍为“java”
*/
}
public static void show(String s1,String s2){
s2.replace('a','o');//s2=java
s1 = s2;
}
/*在栈内存中,java变为了jovo,但是replace是一个有返回值得方法
虽然s2指向的java变了,但由于s2没有去接收变化后的jovo,所以s2仍然
为java,再赋值给s1,s1也为java
*/
//----------------------------------------------------------
private static void show_01(StringBuilder s3, StringBuilder s4) {
s3.append(s4);//s3:"hellojava" s4:java
s3 = s4;//s3:"java" s4:java
/*show_01()方法进栈以后,持有的s3、s4地址值分别指向堆内存中的对象
* (内容为“hello”)(内容为“java”), s3.append(s4);执行,这
* 句话将S4指向的堆内存中对象的内容添加到了S3指向的堆内存中对象的
* 内容为(“hellojava”)。完毕以后s3 = s4;执行,这句话仅仅是
* 将 s4持有的地址值赋给了s3,这意味着此时的s3、s4持有相同的地址值
* 指向的是堆内存中的同一个对象内容为(“java”)。
*/
}
}
关于JAVA中基本数据类型和引用数据类型的详细解释
最新推荐文章于 2023-05-29 16:00:36 发布