我和我的朋友正在讨论Strings,而我们坚持了这一点:
String str = "ObjectOne"+"ObjectTwo";
他说总共将创建三个对象,而我说将创建一个对象。
他在3个对象之后的逻辑是:一个用于“ ObjectOne”,一个用于“ ObjectTwo”,第三个是两个String对象的串联版本。
我在一个对象后面的逻辑是在编译时,两个字符串对象都将在字节码中串联为:
String str = "ObjectOneObjectTwo";
并且在运行时,将仅以这种方式创建一个对象。这背后的真相是什么?
如果您写(文字或常量)
String str = "ObjectOne"+"ObjectTwo";
相当于
String str = "ObjectOneObjectTwo"; // compiler optimize it so one Object
问题内容: 我有以下Java代码: 问题很简单:调用此方法将创建多少个对象? 一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建,没有给出解释(这是一个SCJP问题)。 从我的角度来看,有5个对象:“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。 我也在SCJP模拟考试中找到了这个问题,答案是3。 问题答案: “ Fred”和“ 47”将来自字
我知道,当我们使用下面给出的字符串文本时,字符串对象是在字符串池中创建的(如果它不存在的话)。 在上述情况下,池中只会创建一个字符串对象。 但是,当我们使用new关键字时,它总是在堆内存中创建一个新的String对象(即使String池中有一个) 在这里,我有一个困惑,关于在下面的情况下将创建多少对象,以及在哪里(池或堆内存)。
问题内容: 问题答案: 实习生池中只有一个字符串,每次您运行代码时都会重复使用。 然后是每次运行该行时都会构造的额外字符串。因此,例如: 将以11个字符串结尾,并在内存中包含“ abcd”内容-被插入的1个副本和10个副本。
所以我不确定是0还是2。 如果有人知道请告诉我。
问题内容: 我的朋友给我发了一个问题,他在一次关于字符串对象的Java认证模拟考试中看到了一个问题: 调用此方法时将创建多少个字符串对象?考试给出的正确答案是3。但是我认为是5。 “嗨” “ 5” “ HI5” “H” “H” 我错了吗? 问题答案: String makeStrings() { String s = “HI”; //String literal s = s + “5”; //co
我厌倦了下面的片段,得到了3个对象和3个引用的答案。但在回答键中说,这是4个对象和3个参考。我不知道是我错了还是回答键错了。请有人帮忙。 我的答案解释: 参考文献:str1、str2、str3。因此引用数=3。 对象:最初创建的对象计数=0。 第1行创建值为Java并引用str1的新对象。对象创建计数=1。 第2行创建值为“GFT”并引用“str2”的新对象。对象创建计数=2。 第3行创建新引用“