Code Bye

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

 

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

用equals呗因为equals是比较的内容是否相等

10分
String类对equals方法进行了重写,用来比较两个String对象中的内容是否相等,所以一般两个String比较的话是用equals来比较的,==是用来比较两个对象的地址是否相等。
== 比较的是String对象的地址;
equals比较的是String的值——内容;

10分
如果你要确定两个字符串是否相等,可以这样写:
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;
}
Java用equals   JavaScript用==(严格的话就是===)
equals就是内容相等,==就是两个对象完全相等,也在同一个地址
“==”性能高,但有局限性。
“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来对每个字符进行比较,也是性能差之原因。

引用 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);

10分
我记得在某一个版本的JDK更新说明里曾经提到过, 对于String==String 的解释,为了让该表达式更加的符合看起来的意思,最终判定效果已经改成 值判定了, 也就是说
String s1 = “www.chinaot.com”;
String s2 = “www.chinaot.com”;
s1==s2为true

至于实现方法用的是常量管理,还是操作符重载,就不知道了,
仅供参考。

String 类型的比较与一个字符串是不是相等 应该用equals
引用 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);

字符串比较永远使用equals
8楼的这个在a,b同时为null时结果是错的。

引用 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);

字符串比较永远使用equals
8楼的这个在a,b同时为null时结果是错的。

你知道Java的短路运算吗? return a != null && a.equals(b); 这里a == null时,&&后面的就不会进行,直接返回false,如果b为空,是允许equals空对象的。
唉,这坛里怎么有连基本语法都没学通的就来问问题啊。 

a==b是比较的的是a和b的内存地址,内存地址相同则相等。a.equals(b)比较的其实也是内存地址,但是如果在model中重写equals方法的话,那么就是比较a和b内容值。如果还想hashcode方法,就会根据hash值来比较,看hash表是否相同
String是一个类,是用来描述字符串的一类事物。如果字符串内元素是字符时,用equals方法去比较;如果字符串内元素是数子时,可以用==; 
引用 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);

字符串比较永远使用equals
8楼的这个在a,b同时为null时结果是错的。

你知道Java的短路运算吗? return a != null && a.equals(b); 这里a == null时,&&后面的就不会进行,直接返回false,如果b为空,是允许equals空对象的。
唉,这坛里怎么有连基本语法都没学通的就来问问题啊。 

public static void main(String[] args) {
		String a = null;
		String b = null;
		boolean test = a != null && a.equals(b);
		System.out.println(test);
	}

输出结果: false

引用 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);

字符串比较永远使用equals
8楼的这个在a,b同时为null时结果是错的。

你知道Java的短路运算吗? return a != null && a.equals(b); 这里a == null时,&&后面的就不会进行,直接返回false,如果b为空,是允许equals空对象的。
唉,这坛里怎么有连基本语法都没学通的就来问问题啊。 

public static void main(String[] args) {
		String a = null;
		String b = null;
		boolean test = a != null && a.equals(b);
		System.out.println(test);
	}

输出结果: false

你的意思是两个空值能相等?

简单点来说,==比较的是地址,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。

用equals

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明String 类型的比较与一个字符串是不是相等 用equals还是==