zoukankan      html  css  js  c++  java
  • JAVAString初始化的引用问题

     1 String a="Hello JAVA";
     2 
     3 String b=a;
     4 
     5 System.out.println(a);
     6 
     7 System.out.println(b);
     8 
     9 System.out.println(a==b);
    10 
    11 a="b";
    12 
    13 System.out.println(a);
    14 
    15 System.out.println(b);
    16 
    17 System.out.println(a==b);
    18 
    19 String c=new String("Hello JAVA");
    20 
    21 String d=new String("Hello JAVA");
    22 
    23 System.out.println(c==d);
    24 
    25 System.out.println(a==d);
    26 
    27 System.out.println(a==c);

    运行结果:

    Hello JAVA

    Hello JAVA

    true

    b

    Hello JAVA

    false

    false

    false

    false

    当创建String类型的变量并赋值时,会先到常量池中寻找是否存在这个常量的字符串,如果有则将引用(即地址)返回,如果没有则在常量池中开辟空间并赋值没这个给定的常量的值,然后将引用返回。所以当重新给a赋值”b”时,在常量池中没有找到”b”,然后在常量池中写入”b”,然后将引用返回,但原来的b的引用依然指向原来的”a”,所以a=”b”后,变量a的引用与变量b的引用不一致,所以将返回false。

    当使用String的构造函数初始化变量时,会直接在堆中重新开辟空间并赋值然后返回引用,所以使用new创建的变量的引用均与其他变量不一致,所以得到最后几个false。

    记录下来,留待后查,同时方便他人。

    可以联系我进行交流。Renhanlinbsl@163.com 

    谢谢支持。

                                                              2016.4.1

                                                             14:08

    留待后查,同时方便他人
    联系我:renhanlinbsl@163.com
  • 相关阅读:
    DS博客作业08--课程总结
    DS博客作业07-----查找
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业03--栈和队列
    DS博客作业02--线性表
  • 原文地址:https://www.cnblogs.com/ives/p/5440955.html
Copyright © 2011-2022 走看看