首先来看String类中对应的构造函数。- public String(String original) {
- this.value = original.value;
- this.hash = original.hash;
- }
复制代码 编译时在常量池中有字符串"abc",它是String类型的,语句String a="abc";将字符串"abc"的地址值赋值给a。
语句 String b=new String("abc");调用的就是上述构造函数,因此,b的成员变量,value和hash与字符串"abc"是相同的,但是因为new操作,在内存中分配了新的空间,具有新的地址值。
另外,
- public int hashCode() {
- int h = hash;
- if (h == 0 && value.length > 0) {
- char val[] = value;
- for (int i = 0; i < value.length; i++) {
- h = 31 * h + val[i];
- }
- hash = h;
- }
- return h;
- }
复制代码
综上,可以得出程序的输出结果了。
|