请忽略格式和句子相关的问题。
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方法中获得修改后的值。
答案 0 :(得分:1)
选项:强>
Boolean
值的新Object(创建一个新类或使用ArrayList / HashMap /等)选项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。