【问题标题】:When String object is created by concatenation of string literal variable and String? [duplicate]什么时候通过字符串文字变量和字符串的串联创建字符串对象? [复制]
【发布时间】:2015-01-16 22:44:06
【问题描述】:
public class SubString1
{
public static void main(String[] args)
{
String s="Sachin";
String sb=s+"Tendulkar";
String sbc="SachinTendulkar";
System.out.println(sb==sbc);
}
}

输出:假。

请解释一下为什么输出是假的??

我无法理解这种对象创建背后的逻辑。根据我的说法,两者都应该引用同一个实例,并且答案应该是正确的。 请解释。

【问题讨论】:

  • 你是如何理解Object内存的?
  • 也许this 是一个更好的副本。
  • 请注意,如果您说final String s="Sachin";,结果将变为true。但是你仍然不应该使用== 来比较字符串。
  • 当然。我从不使用 == 比较字符串。这个问题是在一次采访中被问到的。所以我需要解释一下。
  • 字符串"SachinTendulkar" 是一个对象。通过连接“Sachin”和“Tendulkar”创建的字符串是不同的对象。顺便说一句,它们具有相同的值,但这与它们的“对象性”无关,== 是在比较对象地址。

标签: java string substring string-literals


【解决方案1】:

它们是不同的对象引用。 Java 中的字符串是不可变的。

如果要比较字符串的实际内容,请使用 .equals 方法。

【讨论】:

  • 我想了解它背后的逻辑。我同意你的观点,字符串应该与 equals() 方法进行比较。
  • 请解释一下逻辑,它是如何在java中发生的???
  • @Randhishkumar 逻辑是代码完全按照你看到的那样执行。与 == 运算符相比,幕后没有神秘的机制导致 sb 神奇地等于 sbc。如果您认为有,请告诉我们您的想法。这是一个措辞不佳的面试问题,而且没有表现出面试官的出色能力或真正的兴趣。
猜你喜欢
  • 1970-01-01
  • 2016-09-15
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2014-09-14
相关资源
最近更新 更多