2013-07-08 31 views
-1

我對void和return有一些「困惑」。一般來說,我明白在方法中使用void而不返回任何內容,並且在我想將某些內容返回給調用代碼的方法中使用return。無效並返回Java - 何時使用

但在下面的代碼中,我可以同時使用,而我的問題是,要使用哪一個?以及如何確定?是關於表現嗎?

通常情況下,我在這兩種情況下都有相同的結果。

public class Calc { 
    private double number; 

    Calc (double n) 
    { 
     number = n; 
    } 

    public void add(double n) 
    { 
     number += n; 
    } 

    public double add1(double n) 
    { 
     return number = number + n; 
    } 
} 

謝謝!

回答

4

這種方法:

public void add(double n) 
{ 
    number += n; 
} 

你改變number的內部狀態,但這種方法的調用者不知道的number最終值。

在下面的方法中,你是通過調用者的最終值number

public double add1(double n) 
{ 
    return number = number + n; 
} 

我建議保留一個單獨的getNumber() getter方法。

+0

謝謝。但我知道void和return關鍵字的定義。那不是問題。我的問題是「但是在下面的代碼中,我可以同時使用,我的問題是,要使用哪一個?以及如何確定?是關於性能的問題?」 ..... – user2026884

-1

想想這樣說: 如果您從下面的代碼刪除,你認爲你的類沒有任何用處的:

public double add1(double n) 
    { 
     return number = number + n; 
    } 

當你正在做的計算,但計算的結果是永遠API的調用者已知:public void add(double n)

+0

請原諒投票嗎? – zerocool

2

你想寫這個嗎?

Calc c = new Calc(); 
double a = c.add(3); 

如果是,則保留您的add1方法。利用你的類型的對象的返回值的也許更好的方法如下:

public class Calc { 
    .... 
    public Calc add(double d) { number += d; return this; } 
} 

現在你可以寫

Calc c = new Calc().add(1).add(2); 

這是很多次很方便,讀起來很好,並節省垂直屏幕空間。

這個習語被稱爲流利的API

1

在虛空方法:

public void add(double n) 
{ 
    number += n; 
} 

你是不是能夠跨方法使用n變量。這意味着您將無法將其用於Calc方法。

但是,使用這實際上返回的東西,像一個方法時:

public double add1(double n) 
{ 
    return number = number + n; 
} 

你使用這個變量作爲一個對象從而使你的Calc方法和其他內使用多次,你希望,每一次都可能是同一個對象(不建議如果使用不同的值來計算)或每次都有一個新的對象。

據我所知,沒有明顯的表演問題。

+0

你是說變量n在int方法(add1)之外是可見的? – user2026884

+0

是的,但是作爲一個對象 –

+0

你能給我一些關於它的信息或者我可以閱讀的鏈接嗎?當然是 – user2026884

0

我個人比較喜歡返回一個值。它允許您以很少或沒有成本的方式爲調用代碼提供信息(性能通常大致相同)。它可以是計算的結果,也可以是馬克提到的那個對象,允許您將陳述鏈接在一起。哪一個可能取決於你的具體應用。

0

return不應與空類的類型被用作節目輸出默認情況下返回,並且可以通過java類,適當的方法,當你想展示你的程序的輸出等顯示:

System.out.println("number = " + number);