首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么新的String("a")== new String("a")给出false而"a"=="a"给出true.为什么看起来它们在后来的情况下都被视为同一个实例?

这个问题涉及到Java编程语言中的String对象的创建方式和比较方式。

在Java中,String对象有两种创建方式:

  1. 字符串字面量:直接在代码中使用双引号括起来的字符串,例如"a"。这种方式创建的String对象会被存储在字符串常量池中。
  2. 使用String构造函数:例如new String("a")。这种方式创建的String对象会在堆内存中创建一个新的对象。

对于字符串比较,Java中有两种方式:

  1. 使用"=="运算符:这种方式比较的是两个对象的引用是否相同,也就是说它们是否指向同一个内存地址。
  2. 使用equals()方法:这种方式比较的是两个对象的内容是否相同,也就是说它们的值是否相等。

在这个问题中,"a"=="a"给出的结果是true,因为Java编译器会将同一个字符串字面量的引用指向同一个内存地址,所以它们的引用是相同的。

而new String("a")== new String("a")给出的结果是false,因为使用String构造函数创建的对象是在堆内存中创建的,每次创建都会在堆内存中创建一个新的对象,所以它们的引用是不同的。

这个问题中的问题在于,它假设了两种不同的创建方式创建的String对象都是同一个实例,这是不正确的。每种创建方式都会创建不同的String对象,它们的引用是不同的,即使它们的内容相同。因此,我们不能将它们视为同一个实例。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券