2012-04-15 157 views
8

我們可以在java中的類函數中修改一個布爾值,像這樣的東西不會工作,因爲更改對於函數是局部的。我們怎樣才能讓下面的變更通過變量反映外面的方法調用?更改java中的類函數中的布爾值

public void changeboolean(Boolean b) 
{ 
     if(somecondition) 
     { 
       b=true; 
     } 
     else 
     { 
       b=false; 
     } 
} 

編輯 的代碼可能是這樣的:

public String changeboolean(Boolean b,int show) 
{ 
     if(somecondition) 
     { 
       b=true; 
       show=1; 
       return "verify again"; 
     } 
     else 
     { 
       b=false; 
       show=2; 
       return "Logout"; 
     } 
     show=3; 
     return verifed; 

} 

我在尋找這樣的事情

b.setvalue(true); 

這可能嗎?

+1

爲什麼你不返回布爾值呢? – Mat 2012-04-15 12:25:49

+0

爲什麼你不讓這個方法返回新的布爾值? – 2012-04-15 12:25:56

+1

有人需要閱讀一本Java書。 – 2012-04-15 12:26:36

回答

18

我們可以通過修改類功能的布爾值在Java

沒有,Boolean是不可改變的,像所有的包裝爲基本類型。

選項:

  • 返回從你的方法(最好的選擇)
  • 創建的Boolean一個可變相當於它允許你設置的內含價值一boolean。然後,您需要修改參數引用的實例中的值- 更改參數的值以引用其他實例對您無濟於事,因爲參數總是按Java中的值傳遞。該值可能是原始值或參考值,但它仍然通過值傳遞。改變參數的值永遠不會改變調用者的變量。
  • 使用boolean[]與單個元素作爲包裝類型
  • 使用AtomicBoolean作爲包裝類型
+4

對於想要做#2的所有懶惰的人,有*咳嗽* [AtomicBoolean](http://docs.oracle.com/javase /1.5.0/docs/api/java/util/concurrent/atomic/AtomicBoolean.html)在JDK中可用(嘿,我沒有說這是一個好主意;))。 – Voo 2012-04-15 12:39:07

+2

另一個常見的技巧是接受長度爲1的布爾[],並設置'array [0] = result'。 – 2012-04-15 14:22:54

+1

Louis提到的數組技巧可能是實現這一目標的最佳方法。當你需要改變*多個布爾值時,情況出現了,所以「只返回新值」是不夠的(Java,可悲的是,無法應對從函數返回多個值的想法)。數組總是可變的,雖然這種設計不能很好地擴展,但對於在一個區域中使用的例程來說,它是完全正確的,隱藏在視圖中。 – 2014-02-06 17:06:24