Java传参的三种情况
Java中的参数传递

Java中的参数传递
实参与形参
1. 形式参数:是在定义函数名和函数体的时候使⽤的参数,⽬的是⽤来接收调⽤该函数时传⼊的参数。
2. 实际参数:在调⽤有参函数时,主调函数和被调函数之间有数据传递关系。
在主调函数中调⽤⼀个函数时,函数名后⾯括号中的参数
称为“实际参数”。
3. 实际参数是调⽤有参⽅法的时候真正传递的内容,⽽形式参数是⽤于接收实参内容的参数。
值传递和引⽤传递
1. 值传递(pass by value):是指在调⽤函数时将实际参数复制⼀份传递到函数中,这样在函数中如果对参数进⾏修改,将不会影响到实
际参数。
2. 引⽤传递(pass by reference):是指在调⽤函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进⾏的修改,将影响
到实际参数。
传共享对象调⽤(共享对象传递)
传共享对象调⽤中,先获取到实际参数的地址,然后将其复制,并把该地址的拷贝传递给被调函数的形式参数。
因为参数的地址都指向同⼀个对象,所以我们也称之为"传共享对象",所以,如果在被调函数中改变了形式参数的值,调⽤者是可以看到这种变化的。
Java中参数传递
1. 基本数据类型使⽤值传递
2. 对象传递,把对象的引⽤当做值传递给⽅法,即共享对象传递
3. Java对象的传递,是通过复制的⽅式把引⽤关系传递了,如果我们没有改引⽤关系,⽽是找到引⽤的地址,把⾥⾯的内容改了,是会
对调⽤⽅有影响的,因为⼤家指向的是同⼀个共享对象。
4. Java的对象传递,如果是修改引⽤,是不会对原来的对象有任何影响的,但是如果直接修改共享对象的属性的值,是会对原来的对象
有影响的。
java方法传参

java⽅法传参这是⼩弟的第⼀篇博客,写得不好还请看官见谅哈!java 有两种数据类型:基本数据类型(int,short,long,byte,float,double,boolean,char),引⽤数据类型(基本数据类型之外的数组,String,对象等等)。
在⽅法中传参数有两种⽅式:值传递和引⽤传递先看下⾯的⼀个实例。
public class Stu {String name;int age;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}public class Test {protected static void updateStu(Stu stu) {stu.setAge(5);stu.setName("Li");//stu=new Stu();//stu.setAge(5);//stu.setName("Li");//⽤上⾯注释的代码替换掉未注释,修改前后的stu是⼀样的,即3,zhang}protected static void updateStr(String str) {str=new String("update");//str="update";//这两⾏代码效果⼀样}protected static void updateInteger(Integer i) {i=10;}protected static void updateBasic(int i) {i=10;}protected static void updateArray(int[] test) {if(test.length>1)test[0]=10;}protected static void updateCharArray(char[] cs) {cs=new char[3];cs[0]='a';cs[1]='b';cs[2]='c';}public static void main(String[] args){Stu stu=new Stu();stu.setAge(3);stu.setName("Zhang");System.out.println("1-----------当⽅法参数为普通对象");System.out.println("初始值");System.out.println(stu.getAge());System.out.println(stu.getName());updateStu(stu);System.out.println("修改后");System.out.println(stu.getAge());System.out.println(stu.getName());System.out.println("2-----------当⽅法参数为String");String str1=new String("haha");String str2="hehe";System.out.println("初始值");System.out.println(str1);System.out.println(str2);updateStr(str1);updateStr(str2);System.out.println("修改后");System.out.println(str1);System.out.println(str2);System.out.println("3-----------当⽅法参数为Integer");Integer integer=new Integer(5);System.out.println("初始值");System.out.println(integer);updateInteger(integer);System.out.println("修改后");System.out.println(integer);System.out.println("4-----------当⽅法参数为⼋种基本类型");int t=5;System.out.println("初始值");System.out.println(t);updateBasic(t);System.out.println("修改后");System.out.println(t);System.out.println("5-----------当⽅法参数为整数数组");int[] test ={1,2,3};System.out.println("初始值");System.out.println(test[0]+"--"+test[1]+"--"+test[2]); updateArray(test);System.out.println("修改后");System.out.println(test[0]+"--"+test[1]+"--"+test[2]);System.out.println("6-----------当⽅法参数为字符数组");char[] cs ={'1','2','3'};System.out.println("初始值");System.out.println(cs);updateCharArray(cs);System.out.println("修改后");System.out.println(cs);}}=======================================输出1-----------当⽅法参数为普通对象初始值3Zhang修改后5Li2-----------当⽅法参数为String初始值hahahehe修改后hahahehe3-----------当⽅法参数为Integer初始值5修改后54-----------当⽅法参数为⼋种基本类型初始值5修改后55-----------当⽅法参数为整数数组初始值1--2--3修改后10--2--36-----------当⽅法参数为字符数组初始值123修改后123根据上⾯的结果,可以得出这样的结论1、基本数据类型采⽤的是值传递,(类似C⾥⾯的传值),它不会修改实参的值2、引⽤数据类型采⽤的是引⽤传递,(类似C⾥⾯的传指针),和值传递类似,传的是引⽤的⼀份拷贝,⽽⾮引⽤本⾝(通过下⾯的例⼦证实),引⽤可以理解成JAVA的指针,它指向对象在堆⾥⾯分配的⾸地址。
java后端传递给前端参数的方式

在Java后端开发中,传递参数给前端是非常常见的需求。
而传递参数的方式也有多种多样,可以根据具体情况选择合适的方式来实现。
接下来,我将详细探讨Java后端传递参数给前端的方式,并且进行全面评估。
1. URL传参在Java后端开发中,最常见的传递参数的方式之一就是通过URL传参。
通过在URL中添加参数,后端可以将数据传递给前端。
这种方式简单直接,但是对于数据量较大或者对参数安全性要求较高的情况并不适用。
2. 表单提交另一种常见的方式是通过表单提交来传递参数。
前端可以通过表单将数据提交给后端,后端再进行相应的处理并返回结果给前端。
这种方式适用于需要用户交互的场景,但仍然存在数据安全性的问题。
3. AJAX异步请求在现代的Web开发中,利用AJAX进行异步数据交互已经成为主流。
通过AJAX技术,前端可以向后端发起异步请求,后端返回数据,前端再进行相应的处理。
这种方式可以实现页面的局部刷新,提高用户体验,并且可以通过JSON等数据格式保证数据传输的安全性。
4. RESTful API对于复杂的前后端交互场景,可以采用RESTful API来传递参数。
通过定义统一的API接口,前后端可以按照约定的方式进行数据交互,提高开发效率和降低沟通成本。
通过以上评估,我们可以看到不同的场景可以选择不同的方式来传递参数。
对于简单的数据交互,可以选择URL传参或者表单提交;对于复杂的交互场景,可以采用AJAX异步请求或者RESTful API。
选择合适的参数传递方式可以提高开发效率,保证数据安全性。
总结回顾:在Java后端传递参数给前端的过程中,灵活选择合适的方式是至关重要的。
在实际开发中,需要根据具体需求和场景来选择最合适的参数传递方式。
前后端需充分沟通,协商出符合双方需求的参数传递方式。
个人观点:在我看来,RESTful API是当前传递参数给前端的最佳实践。
通过统一的API接口规范,可以更好地定义参数传递方式和数据格式,提高开发效率和降低沟通成本。
Java传参的三种情况

java传值与传引用的三种情况大家先看一个例子:public class Example{String str=new String("good");char[]ch={'a','b','c'};public static void main(String args[]){Example ex=new Example();ex.change(ex.str,ex.ch);System.out.print(ex.str+" and ");System.out.print(ex.ch);}public void change(String str,char ch[]){str="test ok";ch[0]='g';}}看看输出结果?good and gbcjava中没有了c++中这样的引用符号,也没像c#中那样提供了out与ref 那么它是怎么做的呢做什么事情都要去除例外的东西,String类就是此类问题的一个特殊情况为什么特殊呢?因为它是一个引用类型,确执行的是值传递。
这样说有些抽象,还是举个例子吧值传递:class Str{public static void main(String[] args){int i = 900;System.out.println(i);changeInt(i);System.Out.println(i);}public static void changeInt(int s){s = 34234;}}结果:900900这就是所谓的值传递。
i把自己的副本给了函数changeInt的形参,而在changeInt中虽然将s赋值34234。
但是对原来的i值并没有影响,因为它所修改的只是i的copy品而已。
引用传递:class Str{public static void main(String[] args){Yinyong y = new Yinyong();System.Out.println(y.age);changeObject(y);System.Out.println(y.age);}public static void changeObject(Yinyong obj){Obj.age = 34234;}}class Yinyong{int age = 22;}声明了个简单的类Yinyong,当把Yinyong的对象y传递给函数changeObject后,看下前后结果:2234234值被改变了,这就是引用调用。
JAVA传参的三种情况

JAVA传参的三种情况Java中传参的方式有三种情况,分别为按值传递、按引用传递和传递对象。
1.按值传递:按值传递是指将实际参数的值复制给形式参数,即在方法调用时,实际参数的值被复制到方法的形式参数中。
这意味着,在方法中对形式参数的修改不会影响实际参数的值。
Java的基本数据类型如int、float、char等都是按值传递的。
下面是一个示例:```javapublic class Mainpublic static void main(String[] args)int num = 10;System.out.println("调用方法前的值:" + num);changeValue(num);System.out.println("调用方法后的值:" + num);}public static void changeValue(int value)value = 20;System.out.println("方法中的值:" + value);}```上述代码输出结果为:```调用方法前的值:10方法中的值:20调用方法后的值:10```从结果可以看出,在方法中修改形式参数的值,并不会影响实际参数的值。
2.按引用传递:按引用传递是指将实际参数的引用复制给形式参数,即在方法调用时,实际参数的引用被复制到方法的形式参数中。
这意味着,在方法中对形式参数的修改会改变实际参数的值。
Java中的非基本数据类型如数组、对象等都是按引用传递的。
下面是一个示例:```javapublic class Mainpublic static void main(String[] args)int[] arr = {1, 2, 3};System.out.println("调用方法前的数组:" +Arrays.toString(arr));changeArray(arr);System.out.println("调用方法后的数组:" +Arrays.toString(arr));}public static void changeArray(int[] array)array[0] = 4;System.out.println("方法中的数组:" +Arrays.toString(array));}```上述代码输出结果为:```调用方法前的数组:[1,2,3]方法中的数组:[4,2,3]调用方法后的数组:[4,2,3]```从结果可以看出,在方法中修改形式参数所引用的数组的值,实际参数的值也会随之改变。
Java方法传参,测试在方法内部改变参数内容是否会影响到原值

Java⽅法传参,测试在⽅法内部改变参数内容是否会影响到原值我分了三种类型的参数进⾏测试⼀、基本类型public static void main(String[] args) {System.out.println("验证基本类型int作为参数传⼊⽅法中进⾏修改后原值是否会改变");int item1 = 1;System.out.println("int:改变前值为" + item1);changeInt(item1);System.out.println("int:类型改变后值为" + item1);System.out.println("-------------------------------------------------------");}private static void changeInt(int param) {param = 10;System.out.println("int:⽅法中值为" + param);}打印结果:这⾥我⽤的是int,基本类型算是⽐较简单明了,传⼊⽅法的参数是int item1的值拷贝,所以⽅法内改变的不是item1。
⼆、引⽤类型public static void main(String[] args) {System.out.println("验证引⽤类型ItemModel作为参数传⼊⽅法中进⾏修改后原值是否会改变");System.out.println("第⼀次测试");ItemModel item4 = new ItemModel("xiao ming");System.out.println("ItemModel:改变前对象的hashCode为" + System.identityHashCode(item4) + " 值为" + item4.toString());changeItemModel1(item4);System.out.println("ItemModel:改变后对象的hashCode为" + System.identityHashCode(item4) + " 值为" + item4.toString());System.out.println("第⼆次测试");ItemModel item5 = new ItemModel("xiao ming");System.out.println("ItemModel:改变前对象的hashCode为" + System.identityHashCode(item5) + " 值为" + item5.toString());changeItemModel2(item5);System.out.println("ItemModel:改变后对象的hashCode为" + System.identityHashCode(item5) + " 值为" + item5.toString());System.out.println("-------------------------------------------------------");}private static void changeItemModel1(ItemModel param) {param.setName("xiao hong");System.out.println("ItemModel:⽅法中对象的hashCode为" + System.identityHashCode(param) + " 值为" + param);}private static void changeItemModel2(ItemModel param) {param = new ItemModel();param.setName("xiao hong");System.out.println("ItemModel:⽅法中对象的hashCode为" + System.identityHashCode(param) + " 值为" + param);}class ItemModel {private String name;public ItemModel() {}ItemModel(String name) { = name;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic String toString() {return "ItemModel{" +"name='" + name + '\'' +'}';}}打印结果:这⾥我打印了ItemModel的hashCode和toString⽅法,我们可以看到在第⼀次测试中,改变前、⽅法中、改变后对象的hashCode的是⼀样的,所以我们可以确认传⼊⽅法的是对象的引⽤,所以这⼀次原对象发⽣改变。
java 传递方法参数

java 传递方法参数传递方法参数是Java编程中一项常见的操作,它在方法调用过程中起到了重要的作用。
通过传递方法参数,我们可以向方法中传递数据或者对象,使得方法能够接收并处理这些数据,从而实现特定的功能。
在Java中,传递方法参数有两种方式:值传递和引用传递。
值传递是指将实际参数的值复制一份传递给方法,在方法内部对参数的修改不会影响到实际参数的值。
而引用传递则是指将实际参数的地址传递给方法,方法内部对参数的修改会影响到实际参数的值。
在使用值传递时,我们可以将基本类型的数据作为参数传递给方法。
例如,我们可以将一个整数、一个浮点数或者一个布尔值作为参数传递给方法,并在方法内部对其进行处理。
值传递的特点是方法内部对参数的修改不会影响到方法外部的变量。
另一种方式是引用传递,它适用于传递对象作为参数的情况。
在Java中,对象是通过引用来传递的,传递的是对象的地址。
当我们将一个对象作为参数传递给方法时,方法内部可以通过引用修改对象的属性或者调用对象的方法。
这种传递方式能够使方法具有更大的灵活性,可以对对象进行更复杂的操作。
在实际编程中,我们通常会使用值传递和引用传递的组合来完成复杂的任务。
通过值传递,我们可以传递基本类型的数据,并在方法内部对其进行处理;通过引用传递,我们可以传递对象,并在方法内部对对象进行操作。
除了传递参数的方式,我们还可以在方法定义时指定参数的类型和个数。
在Java中,方法的参数可以是基本类型或者对象类型,并且可以有多个参数。
通过指定参数的类型和个数,我们可以更准确地传递参数,并确保方法的正确执行。
传递方法参数的方式和方法的定义有着密切的关系。
在调用方法时,我们需要根据方法的定义来传递参数,并确保参数的类型和个数与方法的定义相匹配。
如果参数的类型和个数不匹配,编译器将会报错,提示我们进行修改。
在实际编程中,我们经常会使用方法来完成特定的任务,尤其是在面向对象的程序设计中。
通过传递方法参数,我们可以将数据或者对象传递给方法,并在方法内部对其进行操作。
java方法间传参

java方法间传参Java是一种面向对象的编程语言,方法是Java程序的基本组成单元之一。
在Java中,方法间传参是实现不同方法之间数据交流的一种重要机制。
本文将介绍Java方法间传参的相关知识,并探讨其在实际开发中的应用。
一、方法间传参的概念和作用在Java中,方法间传参指的是在不同方法之间传递数据或对象。
通过传参,可以将数据或对象从一个方法传递到另一个方法,实现方法之间的数据交流和共享。
这在实际开发中非常常见,可以提高代码的复用性和可维护性。
二、方法间传参的方式Java方法间传参可以通过值传递和引用传递两种方式实现。
1. 值传递值传递是指将实参的值复制一份传递给形参。
在方法内部修改形参的值不会影响实参的值。
这种方式适用于传递基本数据类型,如int、float等。
2. 引用传递引用传递是指将实参的引用传递给形参,形参和实参指向同一个对象。
在方法内部修改形参的值会影响实参的值。
这种方式适用于传递对象类型,如数组、字符串等。
三、方法间传参的注意事项在方法间传参时,需要注意以下几点:1. 参数类型要匹配传递的参数类型要与方法定义时的参数类型保持一致,否则会导致编译错误。
2. 参数个数要一致传递的参数个数要与方法定义时的参数个数保持一致,否则会导致编译错误。
3. 方法调用要正确在方法调用时,需要传递正确的参数,否则会导致运行时错误。
四、方法间传参的实际应用方法间传参在实际开发中应用广泛,以下是几个常见的应用场景:1. 方法返回值传参有时候需要将一个方法的返回值作为另一个方法的参数,可以通过方法间传参实现。
这样可以避免重复计算和提高代码的复用性。
2. 对象属性传参在一个方法中修改了一个对象的属性值,可以将该对象传递给另一个方法,实现属性值的共享和传递。
3. 数组传参数组是一种常见的数据结构,通过将数组作为参数传递给方法,可以实现对数组元素的操作和修改。
4. 字符串传参字符串是一种常用的数据类型,通过将字符串作为参数传递给方法,可以实现对字符串的处理和操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java传值与传引用的三种情况大家先看一个例子:public class Example{String str=new String("good");char[]ch={'a','b','c'};public static void main(String args[]){Example ex=new Example();ex.change(ex.str,ex.ch);System.out.print(ex.str+" and ");System.out.print(ex.ch);}public void change(String str,char ch[]){str="test ok";ch[0]='g';}}看看输出结果? good and gbcjava中没有了c++中这样的引用符号,也没像c#中那样提供了out与ref 那么它是怎么做的呢做什么事情都要去除例外的东西,String类就是此类问题的一个特殊情况为什么特殊呢?因为它是一个引用类型,确执行的是值传递。
这样说有些抽象,还是举个例子吧值传递:class Str{public static void main(String[] args){int i = 900;System.out.println(i);changeInt(i);System.Out.println(i);}public static void changeInt(int s){s = 34234;}}结果:900900这就是所谓的值传递。
i把自己的副本给了函数changeInt的形参,而在changeInt中虽然将s赋值34234。
但是对原来的i值并没有影响,因为它所修改的只是i的copy品而已。
引用传递:class Str{public static void main(String[] args){Yinyong y = new Yinyong();System.Out.println(y.age);changeObject(y);System.Out.println(y.age);}public static void changeObject(Yinyong obj){Obj.age = 34234;}}class Yinyong{int age = 22;}声明了个简单的类Yinyong,当把Yinyong的对象y传递给函数changeObject后,看下前后结果:2234234值被改变了,这就是引用调用。
下面再看看传递String对象会发生什么结果?class Str{public static void main(String[] args){String s = "java test";System.Out.println(s);changeString(s);System.out.println(s);}public static void changeString(String str){str = "3gg over right";}}看看结果吧:java testjava test你惊奇的发现s的值并没有改变!你会问了,String不也是引用类型的吗?怎么它的值没有改变呢?因为是这样的:String被设计为不可修改的类型,也就是对String对象的任何修改都将重新创建一个对象而放弃以前的内存空间的引用!如上例:比如 s指向0x2344,当它赋值给str时str也同样指向了0x2344。
而当执行str="3gg over right"后,str指向了别的地方。
也许是0x2222或者其他,反正不是0x2344了。
所以当你输出s的时候,它的值并没有被修改!综上所述:基本数据类型传递的是值的拷贝;对象类型传递的是引用的拷贝;而String类型传递的虽然也是对象,但它不同于一般的对象类型,它String 被设计为不可修改的类型,也就是对String对象的任何修改都将重新创建一个对象而放弃以前的内存空间的引用!按值传递还是按引用传递这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。
事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解,至于称作按什么传递就不是个大问题了。
1:按值传递是什么指的是在方法调用时,传递的参数是按值的拷贝传递。
示例如下:public class TempTest {private void test1(int a){//做点事情}public static void main(String[] args) {TempTest t = new TempTest();int a = 3;t.test1(a);//这里传递的参数a就是按值传递}}按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。
示例如下:public class TempTest {private void test1(int a){a = 5;System.out.println("test1方法中的a==="+a);}public static void main(String[] args) {TempTest t = new TempTest();int a = 3;t.test1(a);//传递后,test1方法对变量值的改变不影响这里的aSystem.out.println(”main方法中的a===”+a);}}运行结果是:test1方法中的a===5main方法中的a===32:按引用传递是什么指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。
示例如下:public class TempTest {private void test1(A a){}public static void main(String[] args) {TempTest t = new TempTest();A a = new A();t.test1(a); //这里传递的参数a就是按引用传递}}class A{public int age = 0;}3:按引用传递的重要特点传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。
示例如下:第1行 public class TempTest {第2行 private void test1(A a){第3行 a.age = 20;第4行 System.out.println("test1方法中的age="+a.age);第5行 }第6行 public static void main(String[] args) {第7行 TempTest t = new TempTest();第8行 A a = new A();第9行 a.age = 10;第10行 t.test1(a);第11行System.out.println(”main方法中的age=”+a.age);第12行 }第13行 }第14行 class A{第15行 public int age = 0;第16行 }运行结果如下:test1方法中的age=20main方法中的age=204:理解按引用传递的过程——内存分配示意图要想正确理解按引用传递的过程,就必须学会理解内存分配的过程,内存分配示意图可以辅助我们去理解这个过程。
用上面的例子来进行分析:(1):运行开始,运行第8行,创建了一个A的实例,内存分配示意如下:(2):运行第9行,是修改A实例里面的age的值,运行后内存分配示意如下:(3):运行第10行,是把main方法中的变量a所引用的内存空间地址,按引用传递给test1方法中的a变量。
请注意:这两个a变量是完全不同的,不要被名称相同所蒙蔽。
内存分配示意如下:由于是按引用传递,也就是传递的是内存空间的地址,所以传递完成后形成的新的内存示意图如下:也就是说:是两个变量都指向同一个空间。
(4):运行第3行,为test1方法中的变量a指向的A实例的age进行赋值,完成后形成的新的内存示意图如下:此时A实例的age值的变化是由test1方法引起的(5):运行第4行,根据此时的内存示意图,输出test1方法中的age=20 (6):运行第11行,根据此时的内存示意图,输出main方法中的age=205:对上述例子的改变理解了上面的例子,可能有人会问,那么能不能让按照引用传递的值,相互不影响呢?就是test1方法里面的修改不影响到main方法里面呢?方法是在test1方法里面新new一个实例就可以了。
改变成下面的例子,其中第3行为新加的:第1行 public class TempTest {第2行 private void test1(A a){第3行 a = new A();//新加的一行第4行 a.age = 20;第5行 System.out.println("test1方法中的age="+a.age);第6行 }第7行 public static void main(String[] args) {第8行 TempTest t = new TempTest();第9行 A a = new A();第10行 a.age = 10;第11行 t.test1(a);第12行System.out.println(”main方法中的age=”+a.age);第13行 }第14行}第15行class A{第16行 public int age = 0;第17行}运行结果为:test1方法中的age=20main方法中的age=10为什么这次的运行结果和前面的例子不一样呢,还是使用内存示意图来理解一下6:再次理解按引用传递(1):运行开始,运行第9行,创建了一个A的实例,内存分配示意如下:(2):运行第10行,是修改A实例里面的age的值,运行后内存分配示意如下:(3):运行第11行,是把main方法中的变量a所引用的内存空间地址,按引用传递给test1方法中的a变量。
请注意:这两个a变量是完全不同的,不要被名称相同所蒙蔽。
内存分配示意如下:由于是按引用传递,也就是传递的是内存空间的地址,所以传递完成后形成的新的内存示意图如下:也就是说:是两个变量都指向同一个空间。
(4):运行第3行,为test1方法中的变量a重新生成了新的A实例的,完成后形成的新的内存示意图如下:(5):运行第4行,为test1方法中的变量a指向的新的A实例的age进行赋值,完成后形成的新的内存示意图如下:注意:这个时候test1方法中的变量a的age被改变,而main方法中的是没有改变的。