Java的值传递和引用传递

看过一些Java教材的话,对这句话应该不陌生:

“在Java里面参数传递都是按值传递”这句话的意思是:
按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

简单的说,基本类型是按值传递的,方法的实参是一个原值的复本。类对象是按对象的引用地址(内存地址)传递地址的值,那么在方法内对这个对象进行修改是会直接反应在原对象上的(或者说这两个引用指向同一内存地址)。不过要注意String这个类型,如下代码:

引用传递示例

String 非基本数据类型,但是String值不可修改

public static void main(String[] args) {
    String x = new String("goeasyway");
    change(x);
    System.out.println(x);
}

public static void change(String x) {
    x = "even";
}

结果


Paste_Image.png

String的对象是不可修改的,如果真正要达到改变字符串的效果,我们需要使用StringBuilder来替代String。

StringBuffer 代替String,引用示例

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer();
    change(sb);
    System.out.println(sb.toString());
}

public static void change(StringBuffer s) {
    s.append("hello");
}

结果


Paste_Image.png

引用传递一个对象

static class Student {
    public int age;
    public String name;

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

    @Override
    public String toString() {
        return "Student [age=" + age + ", name=" + name + "]";
    }

}

public static void main(String[] args) {
    Student student = new Student(20, "jack");
    change(student);
    System.out.println(student.toString());
}

public static void change(Student s) {
    s.age = 18;
    s.name = "alice";
}

结果:

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大家好我是白泽。 这篇打算讲讲java开发中新人要知道的一些事情吧 对象引用和值引用,这个是在基础不过的知识了,但...
    白泽1935阅读 377评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,238评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,290评论 6 13
  • Java的值传递和引用传递问题 String的对象是不可修改的,如果真正要达到改变字符串的效果,我们需要使用Str...
    gadfly_only阅读 604评论 0 50
  • 昨晚,闺蜜给我打电话了,这是我们今年大学毕业后她给我打的第一个电话,平日里我们要是唠唠嗑,都会微信或者QQ。她...
    李艳玲阅读 280评论 0 0