• 中文
    • English
  • 注册
  • 查看作者
    • 《算法第四版》课后练习题1.2.4答案

      习题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编程思想

    • 0
    • 0
    • 0
    • 2.1k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: