Java_以下返回true的字符串表达式有?"test"=="test"?"test"="test"?"test".equals(new String("test"))?"test"==(new St

这篇博客分析了Java中字符串比较的不同方式,包括使用`==`和`.equals()`方法。内容解释了为何`"test"=="test"`和`"test".equals(new String("test"))`返回`true`,而`"test"="test"`因编译错误不成立,以及`"test"==(new String("test"))`返回`false`的原因。

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

题目代码化:

package StringTest;

public class Test {
	public static void main(String[] args) {
		System.out.println("test"=="test");//A
		System.out.println("test"="test");//B
		System.out.println("test".equals(new String("test")));//C
		System.out.println("test"==(new String("test")));//D
	}
}

答案:AC
分析:

  • A: ==比较的两边的地址值,“test”在字符串常量池中时同一个对象,所以true
  • B:乍一看是一个恒等式,返回true也没错,但是要注意一点的是,赋值语句=左边必须是变量,如果是常量编译器会报错,如图:,但如果左边是变量之后就只是一个字符串表达式了,而不是boolean类型,所以也不存在返回true和false的问题了。
    在这里插入图片描述
  • C:equals方法比较的是两个字符串的内容,所以true。
  • D: ==右边在堆中new出来了一个新的对象,对象保存的是字符串常量池中test的地址,而此表达式本质是 字符串常量池中test的地址 == 堆中字符串对象的地址,所以false。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值