java 参数传递(值传递与引用传递)

值传递与引用传递


1. java方法调动时到底是值传递还是引用传递

package com.zhe.yang.study;


/**
 * 参数传递方式(值传递?引用传递)
 * 看下面例子
 * test01对i进行了重新赋值,但是输出i没有变化,为什么,如果是值传递,那么应该变为1
 * test02是进行对象参数传递,输出结果变化了,那么这次传递是引用传递吗?如果是引用传递请看test03
 * test03对两个对象进行了互换,如果是引用传递,那么这两个对象应该会互换,但是没有互换,为什么?
 * 请容二狗,不对,是小黑,往下说 
 */
public class ParamTranType {


public static void main(String[] args) {
//test01 输出结果是10
int i=10;
change(i);
System.out.println(i);


//test02 输出结果小黑
Man m=new Man("小红", 23);
changeMan(m);
System.out.println(m.getName());


//test03 输出结果是:小红 小黑
Man m1=new Man("小红", 23);
Man m2=new Man("小黑", 23);
exchangeMan(m1,m2);
System.out.println(m1.getName());
System.out.println(m2.getName());


}

public static void change(int i){
i=0;
}

public static void changeMan(Man m){
m.setName("小黑");
}

public static void exchangeMan(Man m1,Man m2){
Man m=new Man();
m=m1;
m1=m2;
m2=m;
}
}


class Man{
private String name;
private int age;


public Man() {
super();
}
public Man(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}


//以下是参照java核心技术券Ⅰ进行的解释

针对test01得图解:

在基本类型得参数进行传递得时候,会复制原有值,然后将复制后得值进行传递,所以不会改变原有值得大小



test02得解释:

引用类型再传递得时候,传递得是“对象引用得副本”,但是副本引用和正常对象引用是引用的同一个对象,因此值回发生变化


test03的解释:


两个man进行传递得都是对象引用得副本,在方法中对副本进行交换,对原来得对象引用是没有影响的,因此才没有发生互换得现象



java核心技术卷Ⅰ,139页 上这样说:

一个方法不能修改一个基本数据类型得参数

一个方法可以改变一个对象的状态

一个方法不能让对象参数引用一个新的对象










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值