JAVAString初始化的引用问题
2017-04-22 19:46
176 查看
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
相关文章推荐
- java引用类型String作为参数的一些问题
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- 解决JAVA中内部类所对应的外部类引用初始化的问题
- 关于java String的“==”和equals()比较、引用的小问题
- 关于java String的“==”和equals()比较、引用的小问题
- 讨论java是值传递还是引用传递,到String 常量池的问题学习。
- java String的句柄引用及创建几个对象的问题
- 【java基础】引用类型数组初始化中,setter和getter函数空指针问题
- Thinking in java 创建一个类,它包含一个未初始化的string引用。验证该引用被初始化成了null
- leetcode_20. Valid Parentheses 括号匹配问题;java String实例的声明和初始化;没用栈;
- 关于java String的“==”和equals()比较、引用的小问题
- Java知识积累——String引用的判断问题
- Java300StudyNote(7)-JVM核心机制(2)-初始化时机-类的主动引用、被动引用、静态初始化块执行顺序问题
- java的值传递和引用传递问题
- java经典问题:传值还是传引用
- Java中两种String对象创建和初始化方式比较
- JAVA string int Integer间的转换以及日期问题
- 关于JAVA中变量的初始化及类属性的默认值问题
- Java中关于String的一点小问题!
- java功底之String的比较问题