String 类型的比较与一个字符串是不是相等 用equals还是==

hadoop333 2014-09-26 01:17:08
String 类型的比较与一个字符串是不是相等 用equals还是==
...全文
20837 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
howsun_zh 2014-09-29
  • 打赏
  • 举报
回复
引用 15 楼 feg545 的回复:
[quote=引用 12 楼 zhangjihao 的回复:] [quote=引用 11 楼 feg545 的回复:] [quote=引用 8 楼 zhangjihao 的回复:] [quote=引用 4 楼 qiuhan 的回复:] 如果你要确定两个字符串是否相等,可以这样写: String a = ""; String b = ""; if(a != null && b !=null){ if(a.equals(b)) return true; else return false; }else if(a == null && b==null){ return true; }else{ return false; }
1行代码搞定,你用了10行:
return a != null && a.equals(b);
[/quote] 字符串比较永远使用equals 8楼的这个在a,b同时为null时结果是错的。 [/quote] 你知道Java的短路运算吗? return a != null && a.equals(b); 这里a == null时,&&后面的就不会进行,直接返回false,如果b为空,是允许equals空对象的。 唉,这坛里怎么有连基本语法都没学通的就来问问题啊。 [/quote]

public static void main(String[] args) {
		String a = null;
		String b = null;
		boolean test = a != null && a.equals(b);
		System.out.println(test);
	}
输出结果: false[/quote] 你的意思是两个空值能相等?
福来哥 2014-09-29
  • 打赏
  • 举报
回复
引用 12 楼 zhangjihao 的回复:
[quote=引用 11 楼 feg545 的回复:] [quote=引用 8 楼 zhangjihao 的回复:] [quote=引用 4 楼 qiuhan 的回复:] 如果你要确定两个字符串是否相等,可以这样写: String a = ""; String b = ""; if(a != null && b !=null){ if(a.equals(b)) return true; else return false; }else if(a == null && b==null){ return true; }else{ return false; }
1行代码搞定,你用了10行:
return a != null && a.equals(b);
[/quote] 字符串比较永远使用equals 8楼的这个在a,b同时为null时结果是错的。 [/quote] 你知道Java的短路运算吗? return a != null && a.equals(b); 这里a == null时,&&后面的就不会进行,直接返回false,如果b为空,是允许equals空对象的。 唉,这坛里怎么有连基本语法都没学通的就来问问题啊。 [/quote]

public static void main(String[] args) {
		String a = null;
		String b = null;
		boolean test = a != null && a.equals(b);
		System.out.println(test);
	}
输出结果: false
梦想家丶Kern 2014-09-29
  • 打赏
  • 举报
回复
String是一个类,是用来描述字符串的一类事物。如果字符串内元素是字符时,用equals方法去比较;如果字符串内元素是数子时,可以用==;
ghx287524027 2014-09-29
  • 打赏
  • 举报
回复
用equals
coder_ywb 2014-09-29
  • 打赏
  • 举报
回复
简单点来说,==比较的是地址,equals比较的是地址里面的内容。 每创建一个实例都会为他分配一个地址即使内容一样也是返回FALSE,因为地址不一样 比如:String str1 = new String("123"); String str2 = new String("123"); 你可以使输出试试,都是“123”,然后再用==试试看看肯定是返回false的 如果像下面这么写,同样两个字符串的结果都是“123”,但是用==却是返回true的 String str1 = "123"; String str2 = "123"; 上面两种情况用equals比较返回的都是true。所以对于String比较 通常使用equals。
software_gemeng 2014-09-28
  • 打赏
  • 举报
回复
a==b是比较的的是a和b的内存地址,内存地址相同则相等。a.equals(b)比较的其实也是内存地址,但是如果在model中重写equals方法的话,那么就是比较a和b内容值。如果还想hashcode方法,就会根据hash值来比较,看hash表是否相同
howsun_zh 2014-09-28
  • 打赏
  • 举报
回复
引用 11 楼 feg545 的回复:
[quote=引用 8 楼 zhangjihao 的回复:] [quote=引用 4 楼 qiuhan 的回复:] 如果你要确定两个字符串是否相等,可以这样写: String a = ""; String b = ""; if(a != null && b !=null){ if(a.equals(b)) return true; else return false; }else if(a == null && b==null){ return true; }else{ return false; }
1行代码搞定,你用了10行:
return a != null && a.equals(b);
[/quote] 字符串比较永远使用equals 8楼的这个在a,b同时为null时结果是错的。 [/quote] 你知道Java的短路运算吗? return a != null && a.equals(b); 这里a == null时,&&后面的就不会进行,直接返回false,如果b为空,是允许equals空对象的。 唉,这坛里怎么有连基本语法都没学通的就来问问题啊。
福来哥 2014-09-28
  • 打赏
  • 举报
回复
引用 8 楼 zhangjihao 的回复:
[quote=引用 4 楼 qiuhan 的回复:] 如果你要确定两个字符串是否相等,可以这样写: String a = ""; String b = ""; if(a != null && b !=null){ if(a.equals(b)) return true; else return false; }else if(a == null && b==null){ return true; }else{ return false; }
1行代码搞定,你用了10行:
return a != null && a.equals(b);
[/quote] 字符串比较永远使用equals 8楼的这个在a,b同时为null时结果是错的。
tangt 2014-09-27
  • 打赏
  • 举报
回复
我记得在某一个版本的JDK更新说明里曾经提到过, 对于String==String 的解释,为了让该表达式更加的符合看起来的意思,最终判定效果已经改成 值判定了, 也就是说 String s1 = "www.chinaot.com"; String s2 = "www.chinaot.com"; s1==s2为true 至于实现方法用的是常量管理,还是操作符重载,就不知道了, 仅供参考。
howsun_zh 2014-09-27
  • 打赏
  • 举报
回复
引用 4 楼 qiuhan 的回复:
如果你要确定两个字符串是否相等,可以这样写: String a = ""; String b = ""; if(a != null && b !=null){ if(a.equals(b)) return true; else return false; }else if(a == null && b==null){ return true; }else{ return false; }
1行代码搞定,你用了10行:
return a != null && a.equals(b);
howsun_zh 2014-09-27
  • 打赏
  • 举报
回复
“==”性能高,但有局限性。 “equals”性能差,但通用。(为什么性能差,可以看源代码) String s1 = "www.chinaot.com"; String s2 = "www.chinaot.com"; s1==s2为true,原因是编辑器将"www.chinaot.com"放进常量池,s2也是常量,这时就不必再放,而是用前常量的拘留值,所以两者是同一个值。类似一个业务中的应用: String color = "red"; color == Color.RED.name() //为true String s3 = "www.chinaot.com"; String s4 = new String("www.chinaot.com"); new String()看作一个对象,它引用指向了前常量的拘留值。但它本身也是一个引用赋给了s4,因此s3和s4不是指向到同一个地方的,这里就必须用equals来对每个字符进行比较,也是性能差之原因。
日知己所无 2014-09-27
  • 打赏
  • 举报
回复
String 类型的比较与一个字符串是不是相等 应该用equals
猿哥 2014-09-26
  • 打赏
  • 举报
回复
equals就是内容相等,==就是两个对象完全相等,也在同一个地址
Coder_D 2014-09-26
  • 打赏
  • 举报
回复
Java用equals JavaScript用==(严格的话就是===)
骤逝 2014-09-26
  • 打赏
  • 举报
回复
如果你要确定两个字符串是否相等,可以这样写: String a = ""; String b = ""; if(a != null && b !=null){ if(a.equals(b)) return true; else return false; }else if(a == null && b==null){ return true; }else{ return false; }
骤逝 2014-09-26
  • 打赏
  • 举报
回复
== 比较的是String对象的地址; equals比较的是String的值——内容;
Jukewu 2014-09-26
  • 打赏
  • 举报
回复
String类对equals方法进行了重写,用来比较两个String对象中的内容是否相等,所以一般两个String比较的话是用equals来比较的,==是用来比较两个对象的地址是否相等。
@computervip 2014-09-26
  • 打赏
  • 举报
回复
用equals呗因为equals是比较的内容是否相等

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧