Java值传递

来源:互联网 发布:seo网络优化招聘 编辑:程序博客网 时间:2024/06/11 05:01

本人拙见,大家共同学习,有问题还望指正


java中值传递,我的理解:一个参数A,传递A本身内容给变量B,在使用过程中若B直接改变A传递过来的内容,则A就会变化,否则不会变化。

而对于A本身内容,若是基本类型,则传递本身值;若是对象,则传递他指向的地址。

简单的代码说明

<pre name="code" class="java">public class Test{public static void main(String[] args){Test test = new Test();// 声明并初始化两个对象,用于测试MyObject myObject1 = new MyObject();myObject1.set(1,"I'm myObject1!");MyObject myObject2 = new MyObject();myObject2.set(2,"I'm myObject2!");System.out.println("初始对象值为:");System.out.println("myObject1 : " + myObject1.toString());System.out.println("myObject2 : " + myObject2.toString());System.out.println();// 交换对象值,查看结果test.swapObject(myObject1,myObject2);System.out.println("交换后对象值为:");System.out.println("myObject1 : " + myObject1.toString());System.out.println("myObject2 : " + myObject2.toString());System.out.println();// 改变对象值,查看结果test.changeObject(myObject1);System.out.println("改变后对象值为:");System.out.println("myObject1 : " + myObject1.toString());System.out.println();int a = 1;int b = 2;System.out.println("初始值为:");System.out.println("a : " + a);System.out.println("b : " + b);System.out.println();// 交换test.swapInt(a, b);System.out.println("交换后值为:");System.out.println("a : " + a);System.out.println("b : " + b);System.out.println();test.changeInt(a);System.out.println("交换后值为:");System.out.println("a : " + a);}public void swapObject(MyObject myObject1, MyObject myObject2){MyObject temp = myObject1;myObject1 = myObject2;myObject2 = temp;}public void changeObject(MyObject myObject){myObject.id = 1000;myObject.decription = "I'm changed!";}public void swapInt(int a, int b){int temp = a;a = b;b = temp;}public void changeInt(int a){a = 1000;}}// 简单对象class MyObject{public int id;public String decription;public void set(int id, String decription){this.id = id;this.decription = decription;}// 重写toString方法,打印类的所有属性@Overridepublic String toString(){return "MyObject [id=" + id + ", decription=" + decription + "]";}}

执行结果为

初始对象值为:myObject1 : MyObject [id=1, decription=I'm myObject1!]myObject2 : MyObject [id=2, decription=I'm myObject2!]交换后对象值为:myObject1 : MyObject [id=1, decription=I'm myObject1!]myObject2 : MyObject [id=2, decription=I'm myObject2!]改变后对象值为:myObject1 : MyObject [id=1000, decription=I'm changed!]初始值为:a : 1b : 2交换后值为:a : 1b : 2交换后值为:a : 1

在对象交换中,没有对本身的值进行改变,并且在方法中只是在对B的指向地址做了改变,跟A没有多大关系

在对象改变中,B直接对A传递的内容进行了更改,这里是直接把myObject1的属性做了修改

在基本类型中,两种都没有直接对内容的改变,从始至终1还是1,没有改变,而且a始终指向的是1

                                             
0 0
原创粉丝点击