起因
在书写业务的时候,使用了工厂+策略的方法废除了大量的if / else,但是却疏忽了一个重要的问题,就是在传入基本类型到void方法内 时,如果不返回,那么在方法内修改基本类型的值是无效的。
代码
@Getter
@Setter
public class TestVO {
private int intObject;
private boolean bolObject = false;
}
public static void main (String[] args) {
int a = 0;
boolean b = false;
String str = "hello";
StringBuilder sb = new StringBuilder("To be ");
TestVO testVO = new TestVO();
testVO.setIntObject(0);
testBasicTypeChangeValue(a, b, testVO);
System.out.println("a = " + a);
if (b) {
System.out.println("b = true");
} else {
System.out.println("b = false");
}
System.out.println("str = " + str);
System.out.println("sb = " + sb.toString());
System.out.println("testVO-->intObject:" + testVO.getIntObject());
System.out.println("testVO-->bolObject:" + testVO.isBolObject());
}
public static void testBasicTypeChangeValue(int a, boolean b, String str, StringBuilder sb, TestVO testVO){
a = 6;
b = true;
str = "world";
sb.append("No.1");
testVo.setIntObject(5);
testVO.isBolObject(true);
}
结果为
a = 0
b = false
str = hello
sb = To be No.1
testVO-->intObject:5
testVO-->bolObject:true
可见基本类型传入void方法后是不会改变值的,而在对象中的基本类型值会被改变,这就是java的值传递机制,值传递详细请参考Java到底是值传递还是引用传递?