1、概述
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了,下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考:
2、值传递
指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下:
/**
* Copyright © 2015-2016 All rights reserved.
*/
package com.yujin.passByValue;
/**
* @description 值传递
* @author <a href="yujin@zxxk.cn">yujin</a>
* @date 2016年4月12日 上午8:28:55
* @version 1.0
*/
public class Demo1 {
public void changeValue(int a){
a = a+1;
System.out.println("changeValue method:"+a);
}
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
int a = 10;
demo1.changeValue(a);
System.out.println("Main method "+a);
}
}
代码分析:
3、引用传递
/**
* Copyright © 2015-2016 All rights reserved.
*/
package com.yujin.passByValue;
/**
* @description 引用传递
* @author <a href="yujin@zxxk.cn">yujin</a>
* @date 2016年4月12日 上午8:52:02
* @version 1.0
*/
public class Demo2 {
public void changeObjetValue(Student stu){
//stu = new Student();
stu.age = 31;
stu.name = "宋江";
System.err.println("changeObjetValue method:"+stu.age+"--"+stu.name);
}
public static void main(String[] args) {
Demo2 demo2 = new Demo2();
Student s = new Student();
s.age = 21;
s.name = "华荣";
demo2.changeObjetValue(s);
System.err.println("main method:"+s.age+"--"+s.name);
}
}
class Student{
public int age;
public String name;
}