• 欢迎访问开享网

java方法参数

java 4个月前 (10-23) 136次浏览 已收录 0个评论 扫描二维码

java中的方法参数按值调用,方法中所得到的是参数值的一个拷贝。

传递值类型
    private static void change(int p){
        p=p*10;
    }

    public static void main(String[] args) {
        int num=11;
        change(num);
        System.out.println(num);
    }

输出:11

参数p只是num的一个拷贝,因此num的值不会变化,这在值类型比较容易理解。

传递引用类型

改变参数对象的属性值

 public class User {
    private long id;
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public User(long id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

    public static void main(String[] args) {
        User user = new User(1,"Jack");
        System.out.println(user);
    }

    private static void change(User user){
        user.setName("Tom");
    }

输出:User{id=1, name='Tom'}

在调用方法change后,原user对象的属性被改变了,那是否证明调用方法时是引用调用呢?再看下面这个例子。

改变引用类型参数变量

将上例的change方法修改为:

    private static void change(User user){
        user=new User(2,"Tom");
    }

输出:User{id=1, name='Jack'}

通过这个例子发现原user对象并没有被change方法修改,和上面例似乎是矛盾的,但是如果理解了最上面的那句话就能够清楚其中的原因了。

在调用方法时,即使参数是引用类型对象,也是按值传递的,方法中得到的是原对象的一个引用,与原对象指向相同的内存地址,因此当修改了方法参数的属性,原对象指向的内容也发生了变化,而当在方法中重新new一个对象后,方法参数已经重新指向了不同的内存地址,所以不再会影响到原对象的变化。


开享网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java方法参数
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址