当前位置: 首页 > 知识库问答 >
问题:

这东西内部是怎么工作的?[重复]

焦兴为
2023-03-14

请遵循以下代码:

String s="helloworld";
String ss="hello";
String sss=ss+"world";
System.out.print(sss==s);

输出是false。他们没有使用String的字符串池规则进行检查吗?如果我们使它们最终呢?

稍微解释一下内部工作会有所帮助。提前谢谢。

如果字符串文本的内容相同,则它们指向相同的位置,这就是我从不同来源获得的结果,对吗?如果是,那么这里发生了什么?我对此有点困惑。

编辑:-

我想我说得不对。让我重新措辞一下(很抱歉之前的尝试):-

    String ss="hello";
    System.out.print(ss+"world"=="helloworld");

返回false。然而,这些是字符串文字,正如我所读到的,它们不会为相同的值创建两个不同的对象。它们只是引用相同的值。这里,“helloworld”是==”两侧的值。我希望我能很好地沟通。

共有1个答案

井旺
2023-03-14

由于字符串是一个对象,因此比较这两个对象是否与字符串相同,这将等同于false。

使用对象ss连接到sss不会使s=sss

如果将ss设置为s,则使用将等同于true,因为它们现在是相同的对象。

如果您使用字符串文字设置第二个String对象,则使用==将等同于true

如果使用字符串对象的函数。等于(字符串),您会发现它等于true。

如果比较两个字符串文字,即“helloworld”=“helloworld”“helloworld”=“hello”“world”,这些文字也将等同于true。

正如lealceldeiro指出的,字符串应该始终与<代码>进行比较。等于()

编辑

值得一看的是这个答案。它有很好的参考和解释。

其他资源:

JournalDev杂志

贝尔东

 类似资料:
  • 问题内容: 在C#中,您可以将一个类标记为,以便只能从同一包中对其进行访问。Java有什么类似的东西吗? 问题答案: 您可以通过从类的声明中省略安全修饰符(公共,私有)来创建程序包专用类。

  • 在阅读了如何在控制台中隐藏日志消息源之后,我对这个命令的工作原理感到困惑。 什么是做什么?它似乎不能删除setTimeout? 还有其他方法做同样的事情吗?

  • 有谁能向我解释一下Vaadin的服务器端Java组件是如何工作的吗?它们似乎在服务器端状态和称为“widgetset”的客户端javascript引擎之间进行同步。 有没有人对Vaadin的内部结构有更详细的解释?我一直试图向我的同事们解释这件事,却不知该说些什么。

  • 问题内容: 在Java中,您可以使用匿名内部类内联定义一个新类。当您只需要重写类的单个方法时,这很有用。 假设您要创建一个仅覆盖单个方法的子类(例如)。在Java中,您可以编写如下代码: 这段代码创建了一个匿名类,该类仅扩展和覆盖方法。 Python中有类似的习语吗?在这些情况下使用哪种习语? 问题答案: 您可以使用内建函数即时创建类。例如: 由于OptionParser不是新式类,因此您必须显式

  • 我正在阅读关于从内部类继承的内容,我一直在努力理解下面的代码是如何工作的: 据我所知,关键字Super指的是超类,Super()指的是它没有参数构造函数。在外层类的情况下,超类是Object类。 我想了解一下,这段代码是如何工作的。 为什么Object类的实例化使扩展内部类成为可能? 创建Object类实例与创建外层类对象有什么关系? 删除包含"o.super();"的行会导致错误: java:包

  • 问题内容: 该文章建议,lambda 不能实现为匿名内部类(由于性能)。它给出了一个示例,可以将lambda表达式编译为类的(静态)方法。 我尝试了一个非常简单的代码段: 输出为: 因此,它不是同一实例。这也不是中央“ Lambda Factory”实例。 那么如何实现lambda? 问题答案: 假设您传递的是 实际的lambda表达式 而不是方法引用,则表达式本身将被编译为单独的合成方法。除了预