如果您没有引用它,那么Java中的对象会发生什么,例如:myString.concat(“that”)
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");
也是完全有效的myStringBuilder.append("foo");
。
基本上,Java在方法定义头文件中没有内置机制,这些机制会告诉JVM该方法仅适用于不可变数据,而方法的唯一目的是输出数据。
我猜他们可以创建这样一种语言结构,但如果没有提供IMO的大量实际好处,它会毫无意义地混乱语言。
- 如何全局更改JTable行高?
- 什么是Spring MVC控制器方法的有效返回类型?
- 在哪些情况下使用工厂类而不是静态函数是有意义的?
- StAX格式良好的XML检查
- Jersey:com.sun.jersey.spi.inject.Errors $ ErrorMessagesException
- this.getClass()。getClassLoader()。getResourceAsStream总是返回null
- 构建Storm时Zookeeper的ClassNotFoundException
- 在Bukkit中从原理图设置块数据?
- 无法从START_ARRAY标记中反序列化java.util.HashMap的实例