Java 是值传递还是 引用传递?

刚刚在网上看了很多资料,初涉这方面 知识,总结 一下! 若有不妥之处 望指正!

其实 在Java中 存在的是 值传递。那你可能会问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案是:值传递。首先不解析这个问题。讲一下基础。

对于基本类型:比如int a=4;a是直接放在 栈里面的。其值就为4.

对于引用类型:比如String str="java";其实str是在栈里 ,其值 为"java"对象的引用,即地址值。所以理解这个之后你就可以往下看了!

对于str="java";str="sb";这俩行代码 的理解是什么?首先 str 指向 "java",之后str重新指向“sb”;注意原有的“java”并未改变。

public class Employee {
	public int age;
	public Employee(int a){
		age=a;
	}
	public static void changeEmployeeAge(Employee em){
		em.age=50;
	}
}
package string;

public class Testmain {
	static void  foo(String text){
		text="windows";
	}
	public static void main(String[] args){
		Employee employee=new Employee(10);
	
		Employee.changeEmployeeAge(employee);
		System.out.println(employee.age);
		//int a[]={2,5};
		//int[]b=a;
		//b[1]=10;
		//System.out.println(a[1]);
		String str="sbbbbb";
		foo(str);
		System.out.println(str);
	}
}

现在来解决这个问题:上面代码是这个问题的实例化。注意当employee 作为参数传递时 em 也同时获得了 其地址值,即em 和 employee 同时指向 employee这个对象

而em.age=50;则直接改变了 这个对象的值。所以 最后输出是50;没毛病的。

而若 你把 Employee 的changeEmployeeAge() 方法改为如下

package string;

public class Employee {
	public int age;
	public Employee(int a){
		age=a;
	}
	public static void changeEmployeeAge(Employee em){
		em=new Employee(50);
	}
}

那么 结果会是什么?答案是:并未改变 输出10;为什么呢?em指向 新的对象而就对象并未改变。employee还是指向之前的对象。(如果你深刻理解了我前面讲得基础的话)代码最好自己写一下 运行一下 (题外话 :如果我讲得有一点让你有收获的话 点个赞把! 我还没被赞过呢哭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值