2011-02-24 80 views
5
  1. 不捕获返回值的方法的值有什么影响?Java返回问题

  2. 它像新开发的内存问题并发症如果返回值没有抓到。

实施例的代码片断:

//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(); 
} 

回答

3

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 
} 
+0

感谢您的生动解答。非常感谢。 – 2011-02-24 22:35:27

-1

没有后果此在JVM。可能不清楚你是否没有使用返回值,因为你只是调用方法,然后是它的副作用。

如果你这样做是有规律的可疑的 - 例如,在你的例子你的方法返回看起来像一个错误代码 - 如果你要忽略错误代码,你至少应该文档。

+2

我不同意。你多久检查一次从Map.put()或Set.add()返回的值?有很多API调用会返回一些额外的信息数据,这些数据可能会或可能不会对您的用例有用。试图记录你忽略返回值的每个实例都是非常繁琐的。 – rfeak 2011-02-24 22:36:56

2
  1. 没有效果。如果你只是为副作用而不是返回值执行一个方法,那么所发生的一切就是副作用完成。

  2. 都能跟得上。返回值被标记为垃圾收集立即。

1

仅仅因为返回值被丢弃而没有发生任何错误。但在某些情况下,它可能表示对API的误用或误解(例如String.replace())。

0

当你打电话,但什么是不醒目的价值效果的返回值将被分配,因为它不会对它的引用,它将符合垃圾收集

0

这是很奇怪的,如果一个方法返回一个值,但来电者忽略它。从广义上讲,方法有两个实用程序,一个用于查询系统状态,一个用于更改系统状态。

有人认为,一种方法应该只做两件事中的一件,但不能同时做两件事。查询方法不能改变系统状态,并且必须返回一个值。更新方法不能返回值。要在调用更新方法后找出新的系统状态,请调用查询方法。

在这个范例中,忽略返回值肯定是错误的 - 如果不是获取返回值,(query)方法调用完全是假的。

这种范例不是我们采用的。我们确实有将两种公用设施混合的方法。还有一些方法会返回其他奇怪原因的值,例如“流利方法”。因此,忽略方法返回值有时是合法的。