java 初级对象问题

来源:互联网 发布:网络p2p的四条红线 编辑:程序博客网 时间:2024/06/05 08:12

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


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


0 0