String

2016-03-02  本文已影响0人  X_未知

String

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false

==比较的是两个对象的引用。s1、s2、s3均为新创建的的String对象,为什么打印出true、false?
一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,而堆内存中则存放new出来的对象和数组。然而除此之外还有一块区域叫做常量池。
String s1 = "abc";这样申明的字符串对象的值就是存储在常量池中。
当创建String s1 = "abc";对象后,"abc"就存储到了常量池(也可叫做字符串池)中,当我们创建引用String s2 = "abc";时,Java底层会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建;如果常量池中没有则创建并添加的池中。

上一篇下一篇

猜你喜欢

热点阅读