我有以下代码:
Circle c1 = new Circle();
Circle c2 = new Circle();
System.out.println(c1 == c2);
它输出false
。这是因为C1
和C2
是引用类型,“==”检查它们是否引用了相同的类型(它们不引用相同的类型)。
String a = "hello";
String b = "hello";
System.out.println(a == b);
由于某种原因,它输出true
。这是为什么?字符串是引用类型,a
和B
引用不同的内存位置。我总是被告知,您需要使用.equals()
才能工作,而这不是!
参见:https://ideone.com/cyje49
更新这不是一个重复的!我知道比较字符串的正确方法是使用.eqauls()
弦乐实习。由于A
和B
都是具有相同值的常量,编译器利用字符串的不变性,使两个变量引用同一字符串,从而节省空间。因此,==
返回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的字符串插入将覆盖我还是我需要自己做点什么?关于字符串实习是否适用于我的其他问题,我已经提出了相互矛盾的建议 完整的答案分为几个部分,因此我在