`

String 字符串内存比较

阅读更多

public class Test{
public static void main(String[] args){
  String S1=new String("abc");
  String S2="abc";
  String S3="abc";
  String S4=new String("abc");
  System.out.println(S1==S2);
  System.out.println(S2==S4);
  System.out.println(S2==S3);
  System.out.println(S1==S4);
}
}

运行的结果是:
false
false
true
false

 

原因的解释:

 

字符串是一个比较特殊的对象。
字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!
字符串对象的创建之后会被放入到串池中。
串池有一个特点,就是对于相同对象,池中只存储一份。
那么串池把神马样的String看做是相同的String呢。请看:
String a="abc";和String b="abc" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!
对于String只要用new关键字new出来的string,都是单独的一个对象。
而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
而String中的equls方法已经做了处理,他是比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics