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

为什么在Java中==有时对字符串起作用?[副本]

梁兴文
2023-03-14

我有以下代码:

Circle c1 = new Circle();
Circle c2 = new Circle();
System.out.println(c1 == c2);

它输出false。这是因为C1C2是引用类型,“==”检查它们是否引用了相同的类型(它们不引用相同的类型)。

String a = "hello";
String b = "hello";
System.out.println(a == b);

由于某种原因,它输出true。这是为什么?字符串是引用类型,aB引用不同的内存位置。我总是被告知,您需要使用.equals()才能工作,而这不是!

参见:https://ideone.com/cyje49

更新这不是一个重复的!我知道比较字符串的正确方法是使用.eqauls()

共有1个答案

柳培
2023-03-14

弦乐实习。由于AB都是具有相同值的常量,编译器利用字符串的不变性,使两个变量引用同一字符串,从而节省空间。因此,==返回true,因为它们实际上是同一个对象。

 类似资料:
  • 代码如下: 运行时,这是错误消息: 错误:不匹配'运算符*'(操作数类型是'std::__cxx11::字符串{aka std::__cxx11::basic_string 如何修复此错误并使程序正确运行?

  • 我是java编程的新手。而且我不明白为什么string对象在Java中是不可变的。

  • 问题内容: 好的,这很愚蠢,但是wtf还在继续吗? 我在Servlet中有一个String变量,它接受参数的值,并基于该值进行测试以执行某些操作,但是该方法不起作用。问题是什么? 在控制台上,System.out.println向我显示了动作的价值是“某物” 问题答案: 您的第二个比较是错误的。您还应该使用代替,例如: 该运算符比较 引用 的(字符串)对象和正常情况下 等于 字符串不自动具有相同的

  • C字符串或std::strings是否可以创建为,还是必须在运行时创建? 使用gcc 4.9.2,我可以做到这一点: (遗憾的是,2013年11月的客户技术预览版不允许Visual Studio支持此功能:https://stackoverflow.com/a/29255013/2642059) 但是即使使用gcc 4.9.2,我也不能这样做: 我得到的错误: 但我想进一步澄清为什么不是文字。也就

  • 我正试图通过对象运行字符串列表。当我单独做的时候,它会工作,但是当我把它作为一个字符串传递时,它就不工作了。我该如何解决这个问题? 是什么导致第一个示例不起作用?变量数据是否将其视为faq。“IntegrationItem1”而不是faq.IntegrationItem1?

  • 问题内容: 我了解Java的String Interning的基本概念,但是我试图弄清楚它发生在哪些情况下,以及我需要自己进行权重加权。 他们在一起告诉我这是好是坏,但没有提到任何其他情况。 尤其是,如果我解析具有很多重复值的文件(例如csv),那么Java的字符串插入将覆盖我还是我需要自己做点什么?关于字符串实习是否适用于我的其他问题,我已经提出了相互矛盾的建议 完整的答案分为几个部分,因此我在