判断String对象相等

来源:互联网 发布:江苏网络电视台 编辑:程序博客网 时间:2024/05/16 07:01

本文通过代码,展示了String对象易弄错的对象相等性判断。由于String对象用到的频率非常多,所以在我们给String对象赋字符串字面量时,会优先重字符串常量池中查找,找到了则返回,找不到则重新创建一个,并将该对象放到常量池中!

但是如果我们使用的是new关键字来创建String对象则与String常量池没有任何关系,都会重新创建一个!

另外通过subString方法截取的字符串也是重新创建的对象。

但是String对象有一个方法intern()会将自身的字符串值去String常量池中用equals方法去找,找到了则返回池中的对象,否则就在池中创建一个 新的对象

public class StringTest {public static void main(String[] args){String str1="a";//首先会先去String常量池里面去找,找到了就使用常量池里面的对象,否则就新建一个String str2="a";//常量池中有了字符串“a”则返回该对象,不需要重新创建String str6=new String("a");//不管常量池中是否有该对象,都会重新创建String str3=str1+str2;//做字符串拼接时会创建新的对象String str7=str1+"";//哪怕equals相等,但是也重新创建了对象String str4=str3.substring(0,1);//字符串截取也是返回新的对象,并不是按equals到常量池中去找对象String str5=new String("a").intern();//创建新对象时首先会先去String常量池里面去找,找到了就使用常量池里面的对象,否则就新建一个放入池中System.out.println("str1==str2:"+(str1==str2));System.out.println("str1==str6:"+(str1==str6));System.out.println("str1:"+str1+ "  str4:"+str4+"  str1==str4:"+(str1==str4));System.out.println("str1==str5:"+(str1==str5));System.out.println("str1==str7:"+(str1==str7));String str8=new String("b").intern();//演示在常量池中找不到对象,则新建一个放入池中String str9="b";//常量池中已经有“b”字符串这个对象了,则直接使用池中这个对象System.out.println("str8==str9:"+(str8==str9));/* * 结果如下 *  str1==str2:truestr1==str6:falsestr1:a  str4:a  str1==str4:falsestr1==str5:falsestr1==str7:falsestr8==str9:true */}}




原创粉丝点击