问题描述
public class Test {public static void main(String[] args) {Boolean boolean1= true;test(boolean1);System.out.println(boolean1);}public static void test(Boolean b){b=false;}}为什么boolean1输出true?
解决方案
Boolean和String一样都是不变类。b=false;这句话其实是生成了一个新的Boolean对象,给了b。所以并没有改变传入参数的地址。关于参数的传递可以参考:http://jackycheng2007.iteye.com/admin/blogs/935038
解决方案二:
打错了....应该是这样 public static void main(String[] args) { Boolean boolean1= true; boolean1= test(boolean1); System.out.println(boolean1); } public static Boolean test(Boolean b){ b=false; return b; }
解决方案三:
public class Test { public static void main(String[] args) { Boolean boolean1= true; boolean1= test(boolean1); System.out.println(boolean1); } public Boolean void test(Boolean b){ b=false; return b; } }
解决方案四:
java中只有值传递,方法中改变数据,只作用于方法内,在方法外不起作用。你应该区分值传递和引用传递的区别。
解决方案五:
因为当你把boolean1作为实参传进去的时候,其实是把形参b指向boolean1的地址此时boolean1值为true,b值为true,当执行b=false语句时,b地址改变,值变为false,但boolean1并没有变,值仍为true。