Java返回问题
不捕获返回值的方法的值有什么影响?Java返回问题
它像新开发的内存问题并发症如果返回值没有抓到。
实施例的代码片断:
//reference types
public Object[] thismethodreturnsvalue(){
return new Object[]{new Object(),new Object(),new Object()};
}
//primitive types
public int thismethodreturnsint(){
return -1;
}
public static void main(String a[]){
thismethodreturnsvalue();
thismethodreturnsint();
}
1。方法返回一个值?
确实没有效果。
返回值将被计算,如果它是在堆上创建(如在你的第一个例子),这将是符合垃圾回收的时候了。
在第二个例子中,返回值将最终在堆栈上,并且该方法返回之后将被简单地丢弃。
2.如果没有捕获到返回值,它是否会产生内存问题等复杂问题?
不,不是真的。正如我上面所说,它将被垃圾收集。
这里是在调用点会发生什么字节码转储:
public class Test {
public static int testMethod() {
return 5;
}
public static void main(String[] args) {
testMethod();
}
}
...对应的字节码:
public static int testMethod();
Code:
0: iconst_5
1: ireturn
public static void main(java.lang.String[]);
Code:
0: invokestatic #2;
3: pop // return value popped immediately.
4: return
}
没有后果此在JVM。可能不清楚你是否没有使用返回值,因为你只是调用方法,然后是它的副作用。
如果你这样做是有规律的可疑的 - 例如,在你的例子你的方法返回看起来像一个错误代码 - 如果你要忽略错误代码,你至少应该文档。
我不同意。你多久检查一次从Map.put()或Set.add()返回的值?有很多API调用会返回一些额外的信息数据,这些数据可能会或可能不会对您的用例有用。试图记录你忽略返回值的每个实例都是非常繁琐的。 – rfeak 2011-02-24 22:36:56
没有效果。如果你只是为副作用而不是返回值执行一个方法,那么所发生的一切就是副作用完成。
都能跟得上。返回值被标记为垃圾收集立即。
仅仅因为返回值被丢弃而没有发生任何错误。但在某些情况下,它可能表示对API的误用或误解(例如String.replace())。
当你打电话,但什么是不醒目的价值效果的返回值将被分配,因为它不会对它的引用,它将符合垃圾收集
这是很奇怪的,如果一个方法返回一个值,但来电者忽略它。从广义上讲,方法有两个实用程序,一个用于查询系统状态,一个用于更改系统状态。
有人认为,一种方法应该只做两件事中的一件,但不能同时做两件事。查询方法不能改变系统状态,并且必须返回一个值。更新方法不能返回值。要在调用更新方法后找出新的系统状态,请调用查询方法。
在这个范例中,忽略返回值肯定是错误的 - 如果不是获取返回值,(query)方法调用完全是假的。
这种范例不是我们采用的。我们确实有将两种公用设施混合的方法。还有一些方法会返回其他奇怪原因的值,例如“流利方法”。因此,忽略方法返回值有时是合法的。
感谢您的生动解答。非常感谢。 – 2011-02-24 22:35:27