关于JAVA中基本数据类型和引用数据类型的详细解释

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”)。
		 */
	
	
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值