当前位置: 首页 > 面试题库 >

如果不引用对象,Java中的对象会发生什么情况,例如:myString.concat(“ that”)

蒋弘致
2023-03-14
问题内容
String myString = "this";
//string is immutable

myString.concat(" that");
//a new object is created but not assigned to anything

System.out.println(myString); //prints out "this"

我更喜欢编译时错误-为什么不是这种情况?在不提供返回类型的情况下调用相同的问题时,可以将其应用于具有返回类型的任何方法。

public myObject doStuff(...whatever){
 //define my method
 return anObject;
}

可以在不提供引用/变量来保存返回类型的情况下调用:

MyObject newObject = doStuff(); //works
doStuff(); //works too without assigning return object

问题答案:

该对象将立即创建并有资格进行垃圾收集(即,可能很快就会被垃圾收集)。

这不是编译时错误的原因是,并非每个返回方法的方法都需要您使用该返回值。某些方法仅因其副作用而被调用。

一个很好的例子是Collection.add():它返回一个boolean对象,但通常情况下,调用代码对该结果不感兴趣,而只是忽略它。

同样,StringBuilder.append()返回StringBuilder实例,以便您可以链接调用。但是忽略该返回值并简单地使用也是完全有效的myStringBuilder.append("foo");



 类似资料:
  • 问题内容: 我的老师给我一个问题: “用Java创建对象时会发生什么”。 据我所知,创建对象时会发生内存分配,变量初始化和构造函数方法调用。 但是我的老师说我几乎是对的。后面的两件事是正确的,除了内存堆。相反,他说发生了内存分配。我认为对象存储在堆中,所以我的老师错了。你这样认为吗? 问题答案: 与往常一样,找到针对此类问题的解决方案的最佳位置是Java语言规范。 具体来说,从创建新实例的部分可以

  • 问题内容: 在上面的程序中,行之后会发生什么? 是 OBJ1 准备进行垃圾回收,即使其成员对象的一个仍然被引用? 问题答案: 自动垃圾回收是查看堆内存,识别正在使用的对象和未使用的对象以及删除未使用的对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍维护着指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。因此,可以回收未引用对象使用的内存。 Java垃圾收集基础知识 在

  • 问题内容: 在哈希图中,提供的键的哈希码用于将值放在哈希表中。在哈希集中,对象哈希码用于将值放置在基础哈希表中。即,哈希图的优点是您可以灵活地确定要作为密钥的内容,这样您就可以完成类似的事情。 这可以将诸如玩家名称之类的字符串映射到玩家本身。 我的问题是,当键的哈希码更改时,查找会发生什么情况。 我希望这不是Hashmap的主要关注点,因为我既不希望也不希望更改密钥。在前面的示例中,如果玩家名称更

  • Stream的方法是一个可变的约简。基于Java文档: 可变缩减操作在处理流中的元素时,将输入元素累积到可变结果容器中,例如Collection或StringBuilder。 我尝试了以下方法,它编译没有问题。 如果供应商是StringBuffer,我将收集操作视为元素将附加到提供的StringBuffer。 既然String是一个不可变的对象,那么可变约简在这里是如何工作的?它是否与每次实现累加

  • 问题内容: 如果两个对象引用指向同一个可序列化的对象,则在Java的序列化过程中会发生什么? 可序列化对象是否保存两次? 例如 : 现在,是否只为 GoodKing 和 BadKing引用 保存了一个对象状态,还是将King对象保存了两次? 问题答案: 文档说明发生了什么: 对象的默认序列化机制将写入对象的类,类签名以及所有非瞬态和非静态字段的值。对其他对象的引用(在瞬态或静态字段中除外)也导致这

  • 考虑以下代码: 旁白:请不要评论“这段代码很糟糕”,“你不能在全局对象中使用析构函数”(你可能不应该这样做),也不要在评论中探究XY问题。这是一个好奇的学生提出的学术问题,他知道如何更好地解决原来的问题,但却在探索C++的广阔天地时偶然发现了这个怪癖。