java方法参数

1、按...调用

按值调用:表示方法接收的是调用者提供的值。
按引用调用:表示方法接收的是调用者提供的变量地址。

一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。

JAVA只采用按值传递调用。也就是说,方法得到的是参数值的一个拷贝。

2、方法参数的两种类型

a、基本数据类型(数字、布尔值);
b、对象引用;

2.1、基本数据类型的传递

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

例如:

public static void add(int i){
	i +=1;
}

public static void main(String[] args){
	int n=100;
	add(n);
	System.out.println(“n=”+n);  

}

结果:n=100

分析:如下图所示,传递的只是n的一个拷贝值,方法只是修改拷贝值,并没有修改n,所以结果仍是原值

2.2、对象引用的传递

a、一个方法可以改变一个对象参数的状态。
b、一个方法不能让一个对象参数引用一个新的对象

举例a:
public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }
}

public class UserTest {

    public static void changeAage(User user){
        int age = user.getAge()+1;
        user.setAge(age);
    }

    public static void main(String[] args){
        User jack = new User("jack",29);
        UserTest.changeAage(jack);
        System.out.println(jack.getAge());
    }
}<strong>
</strong>
结果:30
分析:如下图,因为传递的是对象的引用,所以拷贝的只是jack对象的引用。两个引用指向的堆内存空间地址是一样的,所以如果修改了拷贝引用的属性,会修改堆空间User对象的值(即jack对象的值)

举例b:
public class UserTest {

    public static void changeUser(User user){
        User tom = new User("tom",28);
        user = tom;
    }

    public static void main(String[] args){
        User jack = new User("jack",29);
        changeUser(jack);
        System.out.println(jack.getName() + " "+ jack.getAge());

    }
}
结果:jack 29
分析:传递的只是拷贝的引用,所以引用一个新的tom对象时,并没有影响原来的。jack引用仍然指向堆内存的jack对象。

3、总结

a、一个方法不能修改一个基本数据类型的参数。
b、一个方法可以改变一个对象参数的状态。
c、一个方法不能让一个对象参数引用一个新的对象


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值