龙空技术网

java地址引用传值无法改变原对象的情况

万物生的好物 143

前言:

当前同学们对“java对象传递方法可以修改对象吗”大概比较重视,你们都想要剖析一些“java对象传递方法可以修改对象吗”的相关内容。那么小编在网摘上网罗了一些关于“java对象传递方法可以修改对象吗””的相关内容,希望兄弟们能喜欢,咱们快快来了解一下吧!

参数传值中,java中一般认为值传递是不影响原值,而地址引用传值将改变原对象,

但有的时候对象传值为啥有时无法改变呢?废话不说,直接上代码

/**  *  对象传值为啥有时无法改变呢 * @author Administrator  * */public class ObjectAndClass {	public static void main(String[] args) {						Circle circle1 = new Circle(1);		Circle circle2 = new Circle(2);						System.out.println("原对象的值    circle1 = " + circle1.radius + " circle2 = " + circle2.radius);		swap1(circle1, circle2);		System.out.println("调用 swap1 后: circle1 = " + circle1.radius + " circle2 = " + circle2.radius);						swap2(circle1, circle2);		System.out.println("调用 swap2 后: circle1 = " + circle1.radius + " circle2 = " + circle2.radius);						swap3(circle1, circle2);		System.out.println("调用 swap3 后:circle1 = " + circle1.radius + " circle2 = " + circle2.radius);	}	/**	 * 此方法只是修改了形式入参的指针的指向,对原来调用者的变量的指针并没有影响。 	 * 对象传递,只有修改对象内容才对原来调用者的对象变量有影响。	 * 	 * @param x	 * @param y	 */	public static void swap1(Circle x, Circle y) {		Circle temp = x;		x = y;		y = temp;		//System.out.println("swap1===" + x.radius + "=====" + y.radius);//此处会变,但改变的是形参	}	/**	 * 此方法也只是修改了形式入参的指针的指向,对原来调用者的变量的指针并没有影响。	 *  对象传递,只有修改对象内容才对原来调用者的对象变量有影响。	 * 对象引用传值,只有通过return,并且赋值之前的对象才可以改变	 * @param x	 * @param y	 */	public static void swap2(Circle x, Circle y) {		x = new Circle(11);		y = new Circle(22);		//此处依然无法改变之前的circle1,circle2的值	}	/**	 * 此方法改变对象的内容,引用对应的内容将改变	 * 	 * @param x	 * @param y	 */	public static void swap3(Circle x, Circle y) {		double temp = x.radius;		x.radius = y.radius;		y.radius = temp;	}}class Circle {	double radius;	Circle(double newRadius) {		radius = newRadius;	}}

运行结果如下:

总结:

1.引用传参时,改变参数的引用对原来调用者的变量的指针并没有影响,只有通过return,并且赋值原对象才可以改变原对象

2.引用传参时,改变参数的内容,引用对应的内容将改变,原对象的值也会改变

标签: #java对象传递方法可以修改对象吗 #java传入参数没法改变 #java改变传入参数的值 #java 修改入参