void方法对基本类型以及String的值传递
程序员文章站
2022-07-10 18:42:19
void方法对基本类型以及String的传值问题起因代码起因在书写业务的时候,使用了工厂+策略的方法废除了大量的if / else,但是却疏忽了一个重要的问题,就是在传入基本类型到void方法内 时,如果不返回,那么在方法内修改基本类型的值是无效的。代码@Getter@Setterpublic class TestVO {public int intObject;public boolean bolObject = false;}public static void main (S...
void方法对基本类型以及String的传值问题
起因
在书写业务代码的时候,使用了工厂+策略的方法废除了大量的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到底是值传递还是引用传递?
本文地址:https://blog.csdn.net/GADIOYOUNGE/article/details/108248206
上一篇: ThreadLocal应用及原理
下一篇: 基于Java开发的在线OJ项目