您的位置:首页 > 其它

String比较相等的问题探索

2016-02-01 20:04 211 查看

String比较相等的问题探索

工作上,有个同事犯了个低级错误,把字符串的计较用了==。由于代码已经交付客户,上了生产环境,给公司带了了损失。于是看了他的代码,自己根据以前学的知识,写了几个小demo,加深自己对
字符串比较
的认识。

例1:


!java

public static void main(String[] args) {

String string= "";

if (string=="") {

System.out.println("相等");

} else {

System.out.println("不等");

}

}


run:

相等

例2:


#!java

public static void main(String[] args) {

String string= new String("");

if (string=="") {

System.out.println("相等");

} else {

System.out.println("不等");

}

}

run:不等


上面两例说明,String是对象,对象用==是比较的地址,例一之所以相等,是因为如果用赋值的方式来定义字符串,如果这个字符串已经定义过了,则字符串常量池中已经有此字符串了,就不会再重新生成一个。如果字符串常量池中没有此字符串,就会生成一个。例2的方式,是先在堆内存新建了个对象,对象里存有指向字符串常量池的地址(字符串在常量池的生成和上面原理一样)。也就是说例2中的对象地址不等于字符串的地址。

但是如果我们用String自带的equals方法,就不会出现这种情况。字符串的equals方法重写了Object的equals方法,比较的是内容。所以

我们在开发中,比较字符串都是用equals方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: