我们如何通过main方法中的其他方法更新布尔值

时间:2014-06-17 19:35:16

标签: java

请忽略格式和句子相关的问题。

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的change()方法所做的所有更改,因为我们在main函数中进行了修改。 有什么方法可以在main方法中获得修改后的值。

5 个答案:

答案 0 :(得分:1)

选项:

  1. 将变量放在两个方法之外(作为类变量)
  2. 创建一个数组(用于引用地址而不是值)。
  3. 创建一个包含这两个Boolean值的新Object(创建一个新类或使用ArrayList / HashMap /等)
  4. AtomicBoolean
  5. 选项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 
         }
    }
    

答案 1 :(得分:1)

Java按值传递参数,因此调用者无法看到change()方法中所做的所有更改。

为了做你想做的事,你可以: 1.将此变量定义为类成员。 2.将它们作为方法的返回值返回。是的,您只受一个返回值的限制,但如果您想要创建布尔数组或创建包含两者的specal类。 3.您可以传递给包含boolean的方法可变容器。其中一种方法是使用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
}

答案 2 :(得分:0)

Java是按值传递的,所以当你在这里传递布尔值p.change(x,y,s);时,它将被视为传递值,当你从change方法初始化布尔值时

x=true;
y=true;

它不会抓住那个引用,但是当它超出范围时会被销毁

答案 3 :(得分:0)

您可以将布尔值转换为静态var,然后使用ABC.x调用它们,并使用public static boolean x;在类之后定义它看起来像

class ABC 
{
    public static boolean x;

答案 4 :(得分:0)

在Java中,参数是按值传递的,而不是作为指针传递的,因此传递给函数的变量会将其值复制到方法中的局部变量,因此所有更改只会影响该局部副本。

你可以做的是获取全局变量,或者返回你的函数。

ATT。