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本身应该是
地址引用。
想到这里先写这么多,做个简单笔记,不对地方望大神指出
- java中改变方法参数值
- 在java方法中改变传递的参数的值
- Java方法中通过传递参数改变变量的值
- Java中方法的参数改变情况
- java定义的方法不能改变参数值
- java反射,改变参数值
- Java方法强制传递引用参数(做为返回值),改变被传递参数值。
- Java中方法参数传值问题
- java方法中将类实例作为参数,在方法中有可能会改变这个类实例中的资源
- Swift3中方法可变参数语法的一些改变
- Swift3中方法可变参数语法的一些改变
- 方法传入参数(来自成员变量),在方法中修改参数,退出方法后,是否会改变参数值呢?
- 方法传入参数(来自成员变量),在方法中修改参数,退出方法后,是否会改变参数值呢?
- 方法传入参数(来自成员变量),在方法中修改参数,退出方法后,是否会改变参数值呢?
- Java 方法中参数传递
- Java中方法参数使用
- java中可变参数方法
- Java中向方法传参数只有传值一种!
- 连接字符串-sprintf
- 程序员对内存的理解
- android adt18.0.0后不能导入第三方jar源码问题
- MatLab的排序函数-sort .
- 移植32位程序到64位时碰到精度问题
- java中改变方法参数值
- Windows平台下SVN版本控制系统的搭建
- Introduction to algorithm(chapter 13)
- Valgrind: a toolkit of command check over Linux/Unix
- 墨者:美国经济趋于利好,贵金属下行风险不减
- SCNetworkReachability 使用说明
- OpenCV学习笔记(一)——安装配置、第一个程序
- 80后买房千万别买市郊房 要思考增值空间
- 如何在Ubuntu中安装中文输入法