java中改变方法参数值

来源:互联网 发布:淘宝号可以改账户名吗 编辑:程序博客网 时间:2024/05/17 07:57

昨天遇到一个问题,记下来,以便以后方便
我们都知道C中可以一个变量的地址(指针)当做参数传递给方法,java能吗?
public class JavaTest {

 public static void main(String[] args) { 
  int a = 10; 
  int b = 5; 
  // int
  System.out.println("a=" + a + "\tb=" + b);
  new JavaTest().changeIntA(a, b);
  System.out.println("a=" + a + "\tb=" + b);
  
  // List
  List list = new ArrayList();
  list.add("1");
  list.add("2");
  list.add("3");
  System.out.println("list.size:"+list.size());
  new JavaTest().changeList(list);
  System.out.println("list.size:"+list.size());
 }
 
 public  void changeIntA(int a, int b) { 
  a=a+1; 
  b=b+1;
 }
 
 public void changeList(List list){
  list.add("4");
 }
}
运行程序结果:
a=10 b=5
a=10 b=5
list.size:3
list.size:4
通过这个简单程序发现方法参数值如果是List是可以改变的,但是如果是int就不能。
刚开始我认为应该是int是基本类型,而List是java封装类型,而封装类型是引用,基本类型可能是

传值。
所以那把int改成Integer类型应该会没问题了,但是结果还是没变化。

上网上查了一下也没找到能解释清楚的,如果真要是改变方法参数值,可以使用全局变量

public class JavaTest {

 private static int a;
 private static int b;  


 public static void main(String[] args) { 
  JavaTest test = new JavaTest();
  test.a = 10;
  test.b = 5;

  // int
  System.out.println("a=" + test.a + "\tb=" + test.b);
  new JavaTest().changeIntA(test.a, test.b);
  System.out.println("a=" + test.a + "\tb=" + test.b);
  
 }
 
 public  void changeIntA(int a, int b) { 
  this.a=a+1; 
  this.b=b+1;
 }
}
这样做好像也不是很好,感觉也没什么意义。
当然如果把a,b都封装到一个类中,肯定就行了,因为类引用的是对象地址
public class JavaTest {

 public static void main(String[] args) { 
  IntTest intTest = new IntTest();
  intTest.setA(1);
  intTest.setB(2);
  
  int a = intTest.getA();
  int b = intTest.getB();
  
  // int
  System.out.println("a=" + a + "\tb=" + b);
  new JavaTest().changeIntA(intTest);
  System.out.println("a=" + intTest.getA() + "\tb=" + intTest.getB());
  
 }
 
 public  void changeIntA(IntTest intTest) { 
  intTest.setA(3);
  intTest.setB(4);
 }

}

class IntTest{
 private int a;
 private int b;
 public int getA() {
  return a;
 }
 public void setA(int a) {
  this.a = a;
 }
 public int getB() {
  return b;
 }
 public void setB(int b) {
  this.b = b;
 }
 
}

这里结果是:
a=1 b=2
a=3 b=4


但是有地方没想通,为什么Integer类不是说是java中封装类吗,按道理应该引用地址,应该能改变

参数值,为什么不行呢
原来如果定义成Integer a=Integer(1)
其实Integer.class中构造方法只是
    public Integer(int value) {
 this.value = value;
    }
所以值还是int基本类型。

所以通过这里得出结论:
不管定义成int还是list都是局部变量,而java中没有指针,所以没法传递地址,而list本身应该是

地址引用。

想到这里先写这么多,做个简单笔记,不对地方望大神指出

原创粉丝点击