java 初级对象问题

这是在论坛里看到的问题,这里将自己的理解贴出;


http://bbs.csdn.net/topics/390761915?page=1#post-397364421


问题:

String s =””,String s1= “abc”,String str =null,String tp = s;
创建了几个对象?

A.2 
B.3
C.1


我的理解:


		String s1 = "abc";// 能编译成功,也能执行,既然s1能有toString属性,那么s1肯定是Object;
		System.out.println(s1.toString());

		String s2 = "";// 能编译成功,也能执行,只是输出的也是"",既然s2能有toString属性,那么s2肯定是Object;
		System.out.println(s2.toString());

		// String s3 =
		// null;//可以通过编译,但是运行的时候会抛出NullPointerException,因此次处没有创建新的对象;
		// System.out.println(s3.toString());

		String tp = s2;// 此处是s2的地址传给tp,是址传递,所以也没有创建新对象;
		System.out.println(tp == s2);// 输出true
		System.out.println(tp.equals(s2));// 输出true

		String tp1 = "";
		/*
		 * String类型的数据是放在内存的data segment里面的,而8中基本数据类型是存放在栈中的常量池;
		 * 执行此句的时候,虚拟机会首先在内存的data segment搜索是否已经存在空字符串"",如果没有,
		 * 则创建.如果已经有了,则直接将tp1指向这个地址,因此也没有创建新的对象,这种机制类似常量池;
		 * 这种数据的共享是由编译器完成的,tp1的修改并不会影响到s2;
		 */

		System.out.println(tp1 == s2);// 输出true
		System.out.println(tp1.equals(s2));// 输出true
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值