我厌倦了下面的片段,得到了3个对象和3个引用的答案。但在回答键中说,这是4个对象和3个参考。我不知道是我错了还是回答键错了。请有人帮忙。
String str1=new String("Java"); //line 1
String str2=new String("GFT"); //line 2
String str3=str1; //line 3
str1=str1.concat(str2); //line 4
str3=str2.toUpperCase(); //line 5
我的答案解释:
参考文献:str1、str2、str3。因此引用数=3。
对象:最初创建的对象计数=0。
是这样吗?
因为只有三个唯一的变量名,每个变量名都是一个引用,所以有三个引用是对的。
然而,在Java(和许多其他语言)中,字符串是不可变的,这意味着对字符串的任何操作都会返回一个全新的字符串。
您的误解似乎与字符串有关。toUpperCase()。如果字符串已经完全大写,则返回一个与原始字符串相等的新字符串。您可以测试:
String strA = "ABC";
String strB = strA.toUpperCase();
// two objects that are technically different, though they look and act the same as each other
print(strA == strB); // false - they are not the same string
print(strA.equals(strB)); // true - however, they are equal to each other
Java这对于任何Object*都是true-==
检查将比较两个引用的内存位置,如果它们都指向内存中的相同位置,则返回true
。同时,. equals()
可以为对象自定义行为。如果没有覆盖,这将返回==
检查,但String覆盖该行为并返回true
如果字符串相同。
因此,总共创建了四个对象:
新字符串("Java")
新字符串(“GFT”)
str1.concat(str2)
str2.toUpperCase()
//与str2
相同,但技术上不是相同的对象*注意:这对于int
、Double
等原语不成立,它们没有. equals()
方法,因为它们不是对象。
所以我不确定是0还是2。 如果有人知道请告诉我。
如果我们使用 那么创建了多少对象,它们驻留在哪里?
问题内容: 我有以下Java代码: 问题很简单:调用此方法将创建多少个对象? 一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建,没有给出解释(这是一个SCJP问题)。 从我的角度来看,有5个对象:“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。 我也在SCJP模拟考试中找到了这个问题,答案是3。 问题答案: “ Fred”和“ 47”将来自字
问题内容: 假设我有三节课: 当我创建类C的实例时,它将调用超类的构造函数。那么,是否有多个对象正在创建?如果仅创建一个对象,那么super()像另一个类的构造函数如何?super()方法是否在内部创建对象?我所知道的是,构造函数也是一种方法(我可能错了)。 我的问题是: 在这种情况下创建了多少个对象? 如果创建了一个对象,那么Super()如何在内部调用父类的构造函数? 问题答案: 好问题。您要
我知道,当我们使用下面给出的字符串文本时,字符串对象是在字符串池中创建的(如果它不存在的话)。 在上述情况下,池中只会创建一个字符串对象。 但是,当我们使用new关键字时,它总是在堆内存中创建一个新的String对象(即使String池中有一个) 在这里,我有一个困惑,关于在下面的情况下将创建多少对象,以及在哪里(池或堆内存)。
给定以下代码,在main()中创建了多少对象,在执行第15行之后,有多少对象符合垃圾回收机制? 3个已创建,0个符合条件 4个已创建,1个符合条件 5个创建,2个符合条件 3个已创建,2个符合条件 以上都不是 好的,首先,请不要把它标记为家庭作业。这是我大学的一个测试题。根据我的说法,应该有两个创建的对象,第15行之后有一个符合垃圾收集的条件。这是因为只有两个新的操作符用于创建对象,而“d”在开始