请遵循以下代码:
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”是==”两侧的值。我希望我能很好地沟通。
由于字符串是一个对象,因此比较这两个对象是否与字符串相同,这将等同于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不是新式类,因此您必须显式
问题内容: 该文章建议,lambda 不能实现为匿名内部类(由于性能)。它给出了一个示例,可以将lambda表达式编译为类的(静态)方法。 我尝试了一个非常简单的代码段: 输出为: 因此,它不是同一实例。这也不是中央“ Lambda Factory”实例。 那么如何实现lambda? 问题答案: 假设您传递的是 实际的lambda表达式 而不是方法引用,则表达式本身将被编译为单独的合成方法。除了预
我正在阅读关于从内部类继承的内容,我一直在努力理解下面的代码是如何工作的: 据我所知,关键字Super指的是超类,Super()指的是它没有参数构造函数。在外层类的情况下,超类是Object类。 我想了解一下,这段代码是如何工作的。 为什么Object类的实例化使扩展内部类成为可能? 创建Object类实例与创建外层类对象有什么关系? 删除包含"o.super();"的行会导致错误: java:包