爱程序网

Java关于String类的赋值符号一些验证

来源: 阅读:

我们都知道,很多Java书中说String对象的内容不能修改,但在实际情况中赋值符号还是可以用在已创建的String类对象中,如下面的代码所示:

 1     String s1 = "abs";
 2     String s2 = "abs";
 3     System.out.println("before change:");
 4     System.out.println("s1 is "+s1);
 5     System.out.println("s2 is "+s2);
 6     System.out.println("s1 == s2 is " + (s1 == s2));
 7     s1 = s1.replace('a','c');
 8     System.out.println("after change:");
 9     System.out.println("s1 is "+s1);
10     System.out.println("s2 is "+s2);
11     System.out.println("s1 == s2 is " + (s1 == s2));    

程序运行的结果如下图:

由结果可以看出:

s1能够用赋值符号修改,此时并不会报错。一开始,s1与s2指向同一个地址。当s1修改后,s2的内容并不会改变,s1s2将不再指向同一个地址。此时,s1应该是重新新建了一个对象。

 这里要指出的是语句s1.replace('a','c'); 返回的是一个新的字符串并且不会更改原先字符串的内容。如果没有单纯运行s1.replace('a','c'),s1的内容并不会更改。

 

如果将一个已创建的String类对象用赋值符号与另一个String类对象连接时,产生的效果会不一样,代码如下所示:

 1 String s1 = "abs";
 2 
 3 String s2 = "abs";
 4 
 5 String s3 = new String ("abs");
 6 
 7 System.out.println("before change:");
 8 
 9 System.out.println("s1 is "+s1);
10 
11 System.out.println("s2 is "+s2);
12 
13 System.out.println("s3 is "+s3);
14 
15 System.out.println("s1 == s2 is " + (s1 == s2));
16 
17 System.out.println("s2 == s3 is " + (s2 == s3));
18 
19 s3 = s1;
20 
21 System.out.println("after change:");
22 
23 System.out.println("s1 is "+s1);
24 
25 System.out.println("s2 is "+s2);
26 
27 System.out.println("s3 is "+s3);
28 
29 System.out.println("s1 == s2 is " + (s1 == s2));
30 
31 System.out.println("s2 == s3 is " + (s2 == s3));

代码运行的结果如下图:

可以看到,原先s1和s3并不指向同一位置,但当执行s3 = s1后,s3指向s1的地址,此时s2,s3指向同一地址。按照Java的回收机制,此时原来s3所指向的地址的对象应该被回收。

 

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助