标签:
今天看了Java中的传值和传引用,对于这一块开始的时候不太能理解,通过查阅其他几篇blog,将自己的理解记录下来:
比较好的几篇blog:http://blog.csdn.net/houpuhope/article/details/7449377;
首先对于传值和传引用需要有一个初步的理解就是,通过传值的方式传进来的参数修改了,对原变量并没有什么影响;
而,通过传引用的方式修改的,原变量值也跟着改变。下面进行详细的解析:
1.对于基本类型Java是按照传值传递的:
public class Test { public static void test(boolean test) { test = ! test; System.out.println("In test(boolean): test = " + test); } public static void main(String[] args) { boolean test = true; System.out.println("Beforetest(boolean) : test = " + test); test(test); System.out.println("Aftertest(boolean) : test = " + test); } }
Beforetest(boolean) : test = true In test(boolean) : test = false After test(boolean) : test = true
2.对于对象类型,Java是按照传引用的方式传递:
这里举一个典型的列子:
public class Test { public static void main(String[] args) { StringBuffer a = newStringBuffer("Hello"); StringBuffer b = a; b.append(", World"); System.out.println("a is "+ a); } }输出结果:
a is Hello, World这是因为StringBuffer产生一块内存空间,相关的增、删、改操作都在其中进行。所以为其添加一句,“,World”仍然是在同一段内存地址上进行;
但是还有一个特例的情况:
public class Test { public static void test(String str) { str = "World"; } public static void main(String[] args) { String string = "Hello"; test(string); System.out.println(string); } }输出的结果:
Hello
所以引用一句经典的话总结:结果,就像光到底是波还是粒子的问题一样,Java 方法的参数是按什么传递的问题,其答案就只能是:即是按值传递也是按引用传递,只是参照物不同,结果也就不同。
标签:
原文地址:http://blog.csdn.net/nuisthou/article/details/51330892