Java杂谈之String----"=="与equals的区别

本文详细解释了Java中字符串比较的两种主要方式:使用'=='进行地址比较和使用equals()方法进行值比较。通过实例演示了不同创建字符串的方法如何影响它们的比较结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在程序代码的编写中,经常涉及到两个字符串的比较

这个时候一般困惑我们的是"=="和equals方法的取舍问题,实际上,只要明白了这两者

比较的区别,我们就能够正确的选择出到底采用哪种方式进行字符串的比较了


首先我们定义两个字符串

String s1 = "hello";

String s2 = new String("hello");

这两个都建立了"hello"的字符串,但到底有什么不同呢

注意,Java中没有指针的概念,这边的s1,s2是引用(说白了可以看做是指针,但不具备

指针运算的特性等)



如上图可以看出,两种表示的值都是hello的字符串,但是s1,s2这两个引用指向的地址

则不同。


正好"=="判断的是地址是否相等

而equals()方法判断的是值是否相等


这边大家就应该明白什么时候选用什么来判断字符串是否相等了。

以下是用一个代码示例来说明:

package JavaTestString;

//常量池--内存中放常量的地方
//String s1="hello"----hello字符串会放到常量池中,s1不在常量池中,是引用
//String s2="hello"----不会再新建一个hello常量,所以s2和s1指向同一个常量,都是引用
//s1==s2----两个引用判断相等,是判断的地址是否相同
//String s3=new String("hello")----new出来一个新的内存空间来存放hello,s3依然是引用
//综上所述,'=='判断是地址是否相等,而不是值是否相等
//判断值是否一样的话,用equals()方法

public class JavaStringIsEqual {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "hello";
		String s3 = new String("hello");
		//"=="判断两者指向的地址是否相等,并非代表的值
		if(s1==s2)
		{
			System.out.println("s1与s2指向的地址相等");
		}
		else
		{
			System.out.println("s1与s2指向的地址不相等");
		}
		//equals()方法判断值是否相等,与地址无关
		if(s1.equals(s2))
		{
			System.out.println("s1与s2值相等");
		}
		else
		{
			System.out.println("s1与s2值不相等");
		}
		//"=="比较s1与s3
		if(s1==s3)
		{
			System.out.println("s1与s3指向的地址相等");
		}
		else
		{
			System.out.println("s1与s3指向的地址不相等");
		}
	    //equals()比较s1与s3
		if(s1.equals(s3))
		{
			System.out.println("s1与s3虽然指向的地址不相等,但值是一样的");
		}
		else
		{
			System.out.println("s1与s3指向的地址不相等,值也不相等");
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值