2014-06-17 32 views
0

請忽略格式和句子相關問題。如何通過主方法中的其他方法更新布爾值

class ABC 
{ 
public void change(Boolean x, Boolean y, StringBuffer s) 
{ 
    x=true; 
    y=true; 
    s.append("vinay"); 
} 

public static void main(String a[]) 
{ 
    Boolean x = false; 
    Boolean y = false; 
    x=false; 
    y=false; 
    StringBuffer s = new StringBuffer(); 
    s.append("jasi"); 
    ABC p= new ABC(); 
    p.change(x,y,s); 

    System.out.println(x); 
    System.out.println(y); 
    System.out.println(s);  
} 
} 

我想我在變更進行()方法中的main()方法爲布爾X的所有變化,Y,因爲我們越來越S IN的主要功能進行修改。 有沒有什麼辦法可以在主要方法中獲得修改值。

+0

注意java是按值傳遞的,因此您無法更改參數。 – vandale

+0

由於傳遞值,您甚至無法看到單線程程序中的更改。 – awksp

+0

沒關係,但爲什麼我們在StringBuffer對象的情況下獲得更新值。請澄清我吧。 –

回答

1

Java按值傳遞參數,因此調用者不會看到您的change()方法中所做的所有更改。

爲了做到你想要的,你可以: 1.將此變量定義爲類成員。 2.將它們作爲方法的返回值返回。是的,你只受到一個返回值的限制,但是如果你想創建一個布爾數組或者創建包含兩者的specal類。 3.您可以傳遞給包含布爾值的方法可變容器。其中一種方法是對此使用AtomicBoolean

public void change(AtomicBoolean x, AtomicBoolean y, StringBuffer s) { 
    x.set(true); 
    y.set(true); 
    s.append("vinay"); 
} 

public static void main(String a[]) { 
    AtomicBoolean x = new AtomicBoolean(false); 
    Boolean y = = new AtomicBoolean(false); 
    change(x, y); 
    System.out.println(x.get() + ", " + y.get()); // will print true true 
} 
+0

先生,但我們得到更新值的情況下,StringBuffer對象? –

+0

這是因爲可以修改StringBuffer對象。有了參考資料,你可以改變它。但是StringBuffer引用參數是按值傳遞的。這意味着如果你讓s指向一個不同的對象,它仍然會指向change()函數之外的原始對象。 –

+0

你是指什麼含有布爾值的可變容器 –

0

Java是傳遞的價值,這樣,當你路過這裏的布爾p.change(x,y,s);它將作爲傳值對待,當你從change方法

x=true; 
y=true; 

初始化的布爾它不會搶參考,但會被摧毀時,它超出範圍

+0

先生,但我們傳遞對象來改變方法,因爲我們正在通過s –

+0

@VinaySharma把所有的布爾值作爲一個全局變量 –

1

選項:

  1. 廣場兩個方法之外的變量(作爲類變量)
  2. 創建一個數組(用於引用地址而不是值)。
  3. 創建包含這兩個Boolean值的新對象(創建新的類或使用ArrayList/HashMap中/等)
  4. AtomicBoolean

選項1:

class ABC 
{ 
    Boolean x = false; 
    Boolean y = false; 
    public void change(StringBuffer s) 
    { 
     //code 
    } 

    public static void main(String a[]) 
    { 
     //code 
     p.change(s); 
     //code 
    } 
} 

選項2:

class ABC 
{ 
    public void change(Boolean b, StringBuffer s) 
    { 
     b[0] = true; 
     b[1] = true; 
     //code 
    } 

    public static void main(String a[]) 
    { 
     Boolean[] b = new Boolean[2]; 
     b[0] = false; 
     b[1] = false; 
     //code 
     p.change(b, s); 
     //code 
    } 
} 
+0

也許也想'volatile'? – awksp

+0

翻轉支架。加'''。 –

+0

@ user3580294添加'volatile'或'static'將取決於OP的要求。不一定非要這樣,但我會提到它。 –

0

您可以將您的布爾靜態無功,你會打電話給他們ABC.x,只是用public static boolean x;類,它會看起來像

class ABC 
{ 
    public static boolean x; 
0

在Java中的參數被通過後確定值,而不是指針,所以傳遞給該函數的變量將其值複製到方法中的局部變量中,因此所有更改僅影響該本地副本。

你可以做的是獲得全局變量,或者返回你的函數。

att。