版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caonima0001112/article/details/50588384
java传递分两种形式: 对象传递,参数传递。
总结:
- 对象是按引用传递的
- 参数传递,Java 应用程序有且仅有的一种参数传递机制,即按值传递
- (但是我们参数传递过来的引用 类型的数据,在方法返回后,结果还是会改变,这是因为,在参数传递的时候,创建对象会在栈中保存在堆内存数据的地址,而在参数传递的时候,会把栈中的地址值,作为一个副本传递过去,这个副本保存的也是该对象的地址,所以对象会在方法内部改变,但是因为他和值传递一样都会生成一个副本,所以java参数传递也是值传递。而引用传递是直接传递地址值,不会生成一个副本)
按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。
按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本,其实地址也是一个值。
结合事例来看下,对象的引用传递:
class Test01
{
public static void main(String[] args)
{
StringBuffer s= new StringBuffer("good");
StringBuffer s2=s;
s2.append(" afternoon.");
System.out.println(s);
}
}
对象s和s2指向的是内存中的同一个地址因此指向的也是同一个对象。
程序运行的输出是:
good afternoon.
这说明s2和s是同一个对象。
这里有一点要澄清的是,这里的传对象其实也是传值,因为对象就是一个指针,这个赋值是指针之间的赋值,因此在java中就将它说成了传引用。(引用是什么?不就是地址吗?地址是什么,不过就是一个整数值)
基本类型传递例子
class Test02
{
public static void main(String[] args)
{
int i=5;
int i2=i;
i2=6;
System.out.println(i);
}
}
程序的结果是什么?5!!!
这说明什么,原始数据类型是按值传递的,这个按值传递也是指的是进行赋值时的行为。
参数按值传递应该不难理解,不做特别说明。http://guhanjie.iteye.com/blog/1683637