手机版
你好,游客 登录 注册
背景:
阅读新闻

Java 值传递和引用传递

[日期:2016-09-17] 来源:Linux社区  作者:xmsx [字体: ]

关于Java 值传递和引用传递。

先上代码:

public class JavaTest {
    private int paraInt = 10;

    public int getParaInt() {
        return paraInt;
    }

    public void setParaInt(int paraInt) {
        this.paraInt = paraInt;
    }
    
    public void tryChangeBasicData(int para){
        para = 100;
        System.out.println("inner tryChangeBasicData method:para = " + para);
    }
    
    public void tryChangeObject(JavaTest jTest){
        jTest.setParaInt(100);
        System.out.println("inner tryChangeObject method:para = " + jTest.getParaInt());
    }
    
    public static void main(String[] args) {
        JavaTest jTest = new JavaTest();
        
        System.out.println("基本数据类型作为参数传递");
        System.out.println("before method: " + jTest.getParaInt());
        jTest.tryChangeBasicData(jTest.getParaInt());
        System.out.println("after method: " + jTest.getParaInt());
        
        System.out.println("");
        
        System.out.println("对象引用作为参数传递");
        System.out.println("before method: " + jTest.getParaInt());
        jTest.tryChangeObject(jTest);
        System.out.println("after method: " + jTest.getParaInt());
    }
}

输出:

基本数据类型作为参数传递
before method: 10
inner tryChangeBasicData method:para = 100
after method: 10
***
对象引用作为参数传递
before method: 10
inner tryChangeObject method:para = 100
after method: 100 

基本数据类型作为参数传递

是按值传递,实际上是对传入的基本数据类型参数A 做了一个值拷贝B,然后所有操作是针对这个拷贝B 的,因此不会影响到原参数A

比如上面代码中,tryChangeBasicData() 方法前后 paraInt 值并没有改变。

对象引用作为参数传递

是引用传递,实际上是对传入引用X 做了一个拷贝引用Y,传入引用X 和拷贝引用Y 指向同一个地址。

上面代码中,tryChangeObject() 方法对拷贝引用Y 指向的地址空间内的变量进行修改,所以传入引用X 取得的变量值是修改后的值。

说明

究竟是按值传递还是按引用传递,这点不重要,因为不同的人对这两个定义的理解不一样。

真正需要明白的是:

  1. 基本数据类型(包括装箱的基本数据类型)传递的是值得拷贝,在方法中针对这个参数做任何事情都不会影响原参数;
  2. 对象引用传递的是引用的拷贝,但是无论拷贝多少次,引用指向的地址从未变过,因此可以通过此引用的拷贝修改原对象的一些属性

补充:String 类型

String 在方法中作为参数传递,我们不用考虑传递的是引用还是值得拷贝,因为 String 本身一旦定义了就不可修改,做了“修改”(比如使用连接符做拼接)后就变成另外一个对象了,不会影响原对象。

所以当提起 Java 语言是值传递还是引用传递的时候,不妨换个理解方式,那就是传过去的对象或引用会不会影响原对象。

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-09/135246.htm

linux
相关资讯       Java值传递  Java引用传递 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款