JAVA学习总结之值传参与引用传参
2016-08-19 21:41
204 查看
闲话不多说,先来思考下面这段代码的运行结果。
这道题目一开始是传递基本数据类型,之后是传递引用类型,那么结果到底如何呢?
可以看得出来,基本数据类型传递之后改变,实际上并没有改变原先的值;但是如果是引用类型传值,那么将会改变原先的引用类型的值。
这是因为,实际上在java中,函数的传参都是通过栈来实现的。实际上都是传递栈中的值,将栈中的值复制拷贝一份给下一段函数代码。由于基本数据类型在内存结构中,存放的不是地址,而是真实的值,所以如果传递基本数据类型,那么也意味着将它的副本传递给下一段函数。由下一段函数运行,无论下一段函数怎么改变其值,都不会真正的改变原先的值。
引用类型在传参的时候,传递的也是值,但是并不是引用类型的这个对象,而是引用类型这个对象的地址。其实也就是相当于传递的是引用,众所周知两个引用同时指向同一个对象,其中一个引用改变这个对象的值,另一个引用的对象也会发生改变(因为他们实际上是一个对象)
这就合理的解释了为什么上述的程序的结果。
在java中,传值是通过栈来实现的,传递的是值,但是基本数据类型的值就是其本身的数据值,而引用类型的值确实它所指向的对象的地址,所以该传值相当于传递引用。
public class ParameterTransfer { int a; public static void main(String[] args) { int b = 4; System.out.println("b: " + b); change(b); System.out.println("change b: " + b); ParameterTransfer parameterTransfer = new ParameterTransfer(); parameterTransfer.a = 10; System.out.println("parameterTransfer.a: " + parameterTransfer.a); change(parameterTransfer); System.out.println("change parameterTransfer.a: " + parameterTransfer.a); } private static void change(int i) { i = 100; } private static void change(ParameterTransfer parameterTransfer) { parameterTransfer.a = 100; } }
这道题目一开始是传递基本数据类型,之后是传递引用类型,那么结果到底如何呢?
b: 4 change b: 4 parameterTransfer.a: 10 change parameterTransfer.a: 100
可以看得出来,基本数据类型传递之后改变,实际上并没有改变原先的值;但是如果是引用类型传值,那么将会改变原先的引用类型的值。
这是因为,实际上在java中,函数的传参都是通过栈来实现的。实际上都是传递栈中的值,将栈中的值复制拷贝一份给下一段函数代码。由于基本数据类型在内存结构中,存放的不是地址,而是真实的值,所以如果传递基本数据类型,那么也意味着将它的副本传递给下一段函数。由下一段函数运行,无论下一段函数怎么改变其值,都不会真正的改变原先的值。
引用类型在传参的时候,传递的也是值,但是并不是引用类型的这个对象,而是引用类型这个对象的地址。其实也就是相当于传递的是引用,众所周知两个引用同时指向同一个对象,其中一个引用改变这个对象的值,另一个引用的对象也会发生改变(因为他们实际上是一个对象)
这就合理的解释了为什么上述的程序的结果。
在java中,传值是通过栈来实现的,传递的是值,但是基本数据类型的值就是其本身的数据值,而引用类型的值确实它所指向的对象的地址,所以该传值相当于传递引用。
相关文章推荐
- java按值传参与按引用传参_旺旺老师Java学习解决方案_第一季
- 黑马程序员【andriod】JAVA基础学习笔记三——JAVA的几种引用学习总结
- java Reference 引用学习总结
- Java学习笔记之对象传值和引用总结
- Java中的String、StringBuffer和Math类--学习java语言及其网络应用总结
- java学习笔记(一)--编程规范和技巧总结
- Java线程学习和总结
- java学习笔记:引用与对象(1)
- Java线程学习和总结
- 了解Java学习过程的经验总结
- java学习:持有对方引用
- java框架学习总结
- Java 学习总结(可能是你从来没有考虑过的问题)
- java学习笔记1:对象的"引用"
- java学习笔记2:对象的"引用"之二
- Java 正则表达式学习总结和一些小例子
- Java线程学习和总结
- java5的学习总结
- JAVA学习个人经验总结二: 兼收并蓄,不要试图去研究它.
- JAVA学习总结之Random类