java值传递和引用传递

来源:互联网 发布:淘宝网页版登录首页 编辑:程序博客网 时间:2024/05/17 22:16

1)值传递

在方法调用中,实参会把他的值传递给形参,形参只是用实参的值初始化一个临时的存储单元,因此形参与实参虽然有着相同的值,但是却有着不同的存储单元,因此对形参的改变不影响实参的值

2)引用传递

在方法调用中,传递的是对象(也可以看做对象的地址),这时形参和实参指向同一块存储单元,因此对形参的修改就会影响实参的值

1 原始数据类型在传递参数时都是按值传递,包装类型在传递参数时是按引用传递的。

java中处理8个基本的数据类型(byte、short、int、long、boolean、char、float、double)用的是值传递,其他所有类型都用的是引用传递。

8个基本类型的包装类型都是不可变量。

2 引用也是按值传递的,引用的传递可以理解为传递了一个地址

//测试不可变量在传递参数的变化。public static void testPassParameter(String s1,StringBuffer s2,int i){s1+="world";s2.append("world");i=i+2;}//测试引用也是按值传递的。public static void testPassParameter(StringBuffer ss3,StringBuffer ss4){ss3.append(" world");ss4=ss3;}public static void main(String[] args) {//测试1int i=0;String s1="hello ";StringBuffer s2=new StringBuffer("hello");testPassParameter(s1,s2,i);System.out.println("i的值"+i+" String的值"+s1+" StringBuffer的值"+s2);//测试2StringBuffer s3=new StringBuffer("hello");StringBuffer s4=new StringBuffer("hello");testPassParameter(s3,s4);System.out.println(" S2的值"+s3+" S4的值"+s4);}
输出结果为:

i的值0 String的值hello  StringBuffer的值helloworld
 S2的值hello world S4的值hello

s4的值为hello的原因:在testParameter函数中调用ss4=ss3时,相当于修改了函数内部的局部变量ss4,使ss4的地址等于ss3的地址,但是对s4的地址的值没有影响。

原创粉丝点击