1、概述
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了,下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考:
2、值传递
指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下:
/** * Copyright © 2015-2016 All rights reserved. */package com.yujin.passByValue;/** * @description 值传递 * @author yujin * @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 yujin * @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;}