关于java的String的探讨(二)

2014-11-24 08:17:28 · 作者: · 浏览: 1
ginal)
Initializes a newly created String object so that it represents the same sequence of characters as
the argument; in other words, the newly created string is a copy of the argument string. Unless an
explicit copy of original is needed, use of this constructor is unnecessary since Strings are immutable.
Parameters:
original - a String
它的大致意思是说采用new String(String original)创建一个对象,实际上就是对original参数的一份拷贝,这样在程序执行的时候也确实创建了两个对象,因为在向构造方法传参数的时候的时候,已经创建了一个对象就是original ,只不过这个对象根据在问题一中的分析,它应该是在String串池中创建;另外一个对象由于是采用new的方法,所以会在堆内存中为其分配内存空间。
所以,String str = new String("hello"); 在执行这条语句的时候也确实创建了两个对象,一个是在String串池当中,另外一个是在堆内存当中,

根据java的垃圾回收机制,在串池的对象由于没有变量指向他,应该被标识为垃圾,它对于程序来说已经无用了,也不可能再用。所以,这条语句也确实创建了两个对象,但是一个参数对象也立即被视为垃圾,故,严格的讲上述语句说是创建两个对象不是很确切。
问题四:单独的"str"是不是对象
我认为不是:原因
第一: String a1 ="abcd";
String a2 ="ab"+"cd";
String a3 ="ab";
a3 =a3+"cd";
System.out.println(a2==a1); //true
System.out.println(a3==a1); //false
如果单独的"ab"是一个对象的话,那么利用“ab”连接“cd”与用a3连接"cd"得到的结果是一样的,但事实上是不一样的。
第二:如果单独的“str”是一个对象的话,那么下面的语句都应该被编译器所接受:
new Integer(2);
new Date();
"str"; //error: "str" 不是语句
所以,单独的“str”不应该是一个对象。

作者:gongli109