详述:Java中 String equals与==区别

详述:Java中 String equals与==区别

equals的定义

首先,equals(String targetString)用于判断两个字符串是否相同,完全相同返回true,否则返回false:

public class Test {
 
 public static void main(String[] args) {
	String name1 = "xiaoming";
	String name2 = "xiaoming";
	String name3 = "xiaofang";
	boolean result1 = name1.equals(name2);
	System.out.println(result1); 	//返回true
	boolean result2 = name1.equals(name3);
	System.out.println(result3); 	//返回false
}
 }

equals与==的区别

public class Test {
 
 public static void main(String[] args) {
 	String str1 = "xiaoming";
 	String str2 = new String("xiaoming");
 	String str3 = new String("xiaohong");
 	boolean result1 = str1.equals(str2);
 	System.out.println(result1); //返回true
 	boolean result1 = str1.equals(str3);
 	System.out.println(result2); //返回false
 	//读者可以注意一下,我是采取的两种不同String类实例化的方式,下面要用到。如果读者对这两个有什么不懂的地方可以看我的博客 详述:Java中String的实例化
 }
  }

可以看出来,两种不同String的实例化,跟equals定义中的代码结果一样,为什么会这样呢?我们先来看看==的代码。

public class Test {
 
 public static void main(String[] args) {
 	String str1 = "xiaoming";
 	String str2 = "xiaoming";
 	String str3 = new String("xiaoming");
 	boolean result1 = str1==str2;
 	System.out.println(result1);	//返回true
 	boolean result2 = str1==str3;
 	System.out.println(result2);	//返回false
 }
  }

上述代码可以看出,明明str1 和str3 都表示字符串“xiaoming”,但是返回确实false。
这是因为String中的equals方法判断的是两个字符串的内容是否相同,而当两个变量是引用类型,则就表示两个变量是否指向同一个存放数据的地址,如果是两个基本数据类型,则就比较是两个变量的值是否相同了。
在上面代码中,因为String中equals表示是内容相同,所以boolean result1 = str1.equals(str2);//会返回true, 即使一个是使用是直接赋值方法,一个是采取的构造方法的定义的,且在JVM的存储的位置也不一样,但是只要内容一样,就会返回true,但是在==的代码中,String str1 = "xiaoming";和代码String str3 = new String("xiaoming");,即使两个字符串表示的内容是一样的,但是==是表示变量是否指向同一个存放数据的地址,代码String str1 = "xiaoming";中,"xiaoming"是存放在常量池中,而代码String str3 = new String("xiaoming");中,"xiaoming"是存放在堆中的。所以这两个变量存放的数据地址根本不在一个“容器”中,所以地址肯定不相同,即使内容一样,也无济于事,返回false。

发布了11 篇原创文章 · 获赞 14 · 访问量 289

猜你喜欢

转载自blog.csdn.net/ArcsinTao/article/details/103424707
今日推荐