新闻资讯

公司新闻

首页 >> 新闻资讯 >> 公司新闻

西安品茶网,如何理解 Java的值传递和引用传递

发布时间:2025-06-05

西安品茶网,如何理解 Java的值传递和引用传递


Java数据类型中,分为基本数据类型和引用数据类型


常见的引用数据类型就是类和数组了。


eg:

class HaC {

    String name;

    

    public static void main(String[] args) {

        int age = 25;

        String[] interests = {"打代码"};

        int[] scores ={100};

        HaC haC = new HaC();

        haC.name = "HaC";


        System.out.println("我的名字:" + haC.name + ",年龄:" + age +

 ",我的兴趣之一:" + interests[0] + ",分数:" + scores[0]);


        changeName(haC);

        changeAge(age);

        changeInterests(interests);

        changeScores(scores);

        System.out.println("-----修改后------");


        System.out.println("我的名字:" + haC.name + ",年龄:" + age + 

",我的兴趣之一:" + interests[0] + ",分数:" + scores[0]);


    }


    static void changeName(HaC haC) {

        haC.name = "哈C";

    }


    static void changeAge(int age) {

        age = 18;

    }


    static void changeInterests(String interests[]) {

        interests[0] = "开车";

    }


    static void changeScores(int scores[]) {

        int[] newScores ={60};

        scores = newScores;

    }

}

输出:


我的名字:HaC,年龄:25,我的兴趣之一:打代码,分数:100

-----修改后------

我的名字:哈C,年龄:25,我的兴趣之一:开车,分数:100

可以看到有两处修改成功了:


haC.name = "哈C";

interests[0] = "开车";


而 age、scores[] 没有修改成功。


图解:


1、 changeName 、changeInterests 的原理是一样的

1)第一步

HaC haC = new HaC();

haC.name = "HaC";


haC 是一个引用地址0x9527 ,指向 new HaC() 对象


2)第二步

调用方法


changeName(haC);

static void changeName(HaC haC) {

       

}

HaC haC = new HaC(); 和 changeName(HaC haC)参数里面的两个haC 地址都是一样的,指向同一个对象。



3)第三步

修改


haC.name = "哈C";


所以这个修改是通过地址去修改了值。


2、changeAge、changeScores 原理差不多

changeAge的过程:


int age = 25;

changeAge(age);

把age的值copy 了一份给changeAge方法



修改了进行修改(但是这个修改是修改副本的值)


age = 18;


changeScores 的过程:


1)第一步

初始化


 int[] scores ={100};

scores指向一个地址0x1314



2、第二步

调用方法


changeScores(scores);

static void changeScores(int scores[]) {

    

}

把scores的地址传递给副本(方法),两个同样指向地址0x1314



3、第三步

changeScores方法重新把一个新值(地址)赋予给scores


int[] newScores ={60};

scores = newScores;


此时两个地址是不一样的,但是方法里面的局部变量scores 和 全局变量 scores 所指向的是不一样的,你是你,我是我。


在Java中,大家都觉得参数的传递分为 值传递 和 引用传递


如果参数是基本类型,传递的是基本类型的字面量值的拷贝。


如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。


但是Java中方法参数传递方式是按值传递,也只有值传递(地址也是值啊!)


/   关于我们
长沙品茶
/   长沙夜生活
品茶工作室
品茶网
男士品茶
/   联系我们
地址:长沙
电话:3877018925 QQ
手机:3877018925 QQ
邮件:admin@admin.com
传真:010-88888888
二维码 扫一扫
Copyright © 2025 长沙品茶工作室 本站资源来源于互联网 苏ICP12345678 XML 网站模板