Java值传递

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


java中值传递,我的理解:

对于对象,则传递对象引用地址,所有在此地址上的修改,凡是指向改地址的引用都会发生改变,即改变了传递的参数。

对于基本类型和不可变对象例如String,本身是不可变的,无法对其进行直接修改,所以不会改变传递的参数

简单的代码说明

<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方法,打印类的所有属性
	@Override
	public 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 : 1
b : 2

交换后值为:
a : 1
b : 2

交换后值为:
a : 1

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

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

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


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值