对象引用和值引用的区别

/**对象引用(地址引用)和值引用的区别 ,画图就清楚了*/

引用时是值引用的数据类型,比如int,short,long,byte,float,double,char,boolean,其它都是对象引用。

public static void main(String[] args) {
		String str1 = "string interning"; // string literal会被自动”扣留“
		String str2 = new String(str1); // 这时产生了两个内容相同的String对象
		System.out.println(str1 == str2);// 输出false
		str2 = str2.intern(); // 这时 str1 和 str2 指向的是同一个String对象,
		/*
		 * 补充介绍一点:String.intern();存在于.class文件中的常量池,在运行期间被jvm装载,并且可以扩充。
		 * String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,
		 * java查找常量池中是否有相同unicode的字符串常量,如果有,则返回其引用,如果没有,
		 * 则在常量池中增加一个unicode等于str的字符串并返回它的引用。
		 */
		System.out.println(str1 == str2); // 输出true

		StringBuffer s = new StringBuffer("good");
		StringBuffer s2 = new StringBuffer("bad");

		test(s, s2);

		System.out.println(s);// goodhah
		System.out.println(s2);// bad
		/*
		 * 关于s和s2运行结果说明: s2并没有被增加,因为引用的时候 x去引用的是s3 而y至始至终引用的是s,增加的时候也是 s对象,所以test中y是输出goodhaha,
		 *  x = new StringBuffer("new");的时候就已经开辟了一个新的区域,存放new
		 * 指引在这个时候已经被改变了,所以实参s也改变成goodhah
		 * 
		 */
	}

	static void test(StringBuffer x, StringBuffer y) {
		System.out.println("Start entering the test method:");
		// System.out.println(x);// good
		// System.out.println(y);// bad
		y = x;
		x = new StringBuffer("new");
		// System.out.println(x);// new
		System.out.println(y);// good
		x.append("hah");
		y.append("hah");

		System.out.println(x);// newhah
		System.out.println(y);// goodhah
		System.out.println("End test method.");
	}

   


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值