2011-02-24 79 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)方法調用完全是假的。

這種範例不是我們採用的。我們確實有將兩種公用設施混合的方法。還有一些方法會返回其他奇怪原因的值,例如「流利方法」。因此,忽略方法返回值有時是合法的。