习题1.2.4
以下这段代码会打印出什么?
String string1 = "hello"; String string2 = string1; string1 = "world"; StdOut.println(string1); StdOut.println(string2);
要点分析
首先我们做一个测试类:
import edu.princeton.cs.algs4.StdOut; /** * @description: * @author: ZhangJia * @create: 2018-08-07 14:36a **/ public class Four { public static void main(String[] args) { String string1 = "hello"; String string2 = string1; string1 = "world"; StdOut.println(string1); StdOut.println(string2); } } 输出: world hello
可能看到这里大家会有疑惑,String不是基本的数据类型,那么为什么修改了string1的值,string2的值却没有收到影响呢?
其实这里涉及到Java中的String的特性问题。
在Java中,String对象是不可变的,查看JDk文档你就会发现,String类的每一个看起来会修改String类值的方法,实际上都是创建了一个全新的对象,用以包含修改后的字符串内容[1] 。我们可以输入string1和strng2的hashcode来证实这一说法。
import edu.princeton.cs.algs4.StdOut; /** * @description: * @author: ZhangJia * @create: 2018-08-07 14:36a **/ public class Four { public static void main(String[] args) { String string1 = "hello"; String string2 = string1; System.out.println("string1的hashcode:" + string1.hashCode()); System.out.println("string2的hashcode:" + string2.hashCode()); string1 = "world"; StdOut.println(string1); StdOut.println(string2); System.out.println("string1的hashcode:" + string1.hashCode()); System.out.println("string2的hashcode:" + string2.hashCode()); } } 输出: string1的hashcode:99162322 string2的hashcode:99162322 world hello string1的hashcode:113318802 string2的hashcode:99162322
可以看到,在修改了string1的值后,可以看到,string1的hashcode值已经改变,而string2的保持不变。
参考答案
world
hello
参考资料
[1] Java编程思想
请登录之后再进行评论