美文网首页
Java传值与传引用

Java传值与传引用

作者: wanggs | 来源:发表于2018-10-27 11:23 被阅读0次

定义

传值

传递的是值的副本。方法中对副本的修改,不会影响到调用方

传引用:

传递的是引用的副本,共用一个内存,会影响到调用方。
此时,形参和实参指向同一个内存地址。

注意: 对引用副本本身(对象地址)的修改,如设置为null,重新指向其他对象,不会影响到调用方。
基本数据类型
/**
 * @author Wgs
 * @version 1.0
 * @create:2018/10/27
 */
public class ParamChangeValue {
    public static void main(String[] args) {
        int i = 5;
        System.out.println("args = [" + i + "]");
        change(i);
        System.out.println("args = [" + i + "]");
    }

    private static void change(int i) {
        i = 1 + 5;
    }
}
输出
args = [5]
args = [5]


对象
/**
 * @author Wgs
 * @version 1.0
 * @create:2018/10/27
 */
public class ObjectChangeValue {
    private int age;
    private String name;

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

    public static void main(String [] args){
        ObjectChangeValue objectChangeValue = new ObjectChangeValue();
        objectChangeValue.setAge(2);
        objectChangeValue.setName("tom");
        System.out.println(objectChangeValue);

        change(objectChangeValue);

        System.out.println(objectChangeValue);
    }

    private static void change(ObjectChangeValue objectChangeValue) {
            objectChangeValue.setName("jack");
            objectChangeValue.setAge(23);
    }
}

输出
ObjectChangeValue{age=2, name='tom'}
ObjectChangeValue{age=23, name='jack'}
注:如果对象被重新创建或赋值为null,即new则会重新指向其他对象,不影响其远对象的值
/**
 * @author Wgs
 * @version 1.0
 * @create:2018/10/27
 */
public class ObjectChangeValueNew {
    private int age;
    private String name;


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

    public static void main(String[] args) {
        ObjectChangeValueNew objectChangeValue = new ObjectChangeValueNew();
        objectChangeValue.setAge(2);
        objectChangeValue.setName("tom");
        System.out.println("args = [" + objectChangeValue + "]");
        change(objectChangeValue);
        System.out.println("after args = [" + objectChangeValue + "]");

    }

    private static void change(ObjectChangeValueNew objectChangeValue) {
        objectChangeValue = new ObjectChangeValueNew();
        objectChangeValue.setName("jack");
        objectChangeValue.setAge(23);

        System.out.println(objectChangeValue);
    }
}

输出
args = [ObjectChangeValue{age=2, name='tom'}]
ObjectChangeValue{age=23, name='jack'}
after args = [ObjectChangeValue{age=2, name='tom'}]


String、Integer、Long等
public class StringChangeValue {    
    public static void main(String[] args) {        
          String s = "test1";        
          System.out.println("args = [" + s + "]");        
          change(s);                
          System.out.println("args = [" + s + "]");    
    }    
    private static void change(String i){       
           i = i + " test value";    
    }
}

输出
args = [test1]
args = [test1]
总结

基本类型(byte,short,int,long,double,float,char,boolean)为传值

对象类型(Object,数组,容器)为传引用

String、Integer、Double等immutable类型因为类的变量设为final属性,无法被修改,只能重新赋值或生成对象。

当Integer作为方法参数传递时,对其赋值会导致原有的引用被指向了方法内的栈地址,失去原有的的地址指向,所以对赋值后的Integer做任何操作都不会影响原有值。

相关文章

  • java调用方法传递机制

    java是传值,不是传引用,有人说有的人说:基础类型传值,对象类型传引用。其实对象类也是传值,只不过对象的值恰好是...

  • Java传值与传引用

    定义 传值 传递的是值的副本。方法中对副本的修改,不会影响到调用方 传引用: 传递的是引用的副本,共用一个内存,会...

  • JavaSE基础面试题

    1、Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 ...

  • Java的传值与传引用

    最近在工作中踩到了一个坑,就是Java的值传递和引用传递。对于值传递和引用传递定义有了解,但编写代码时没有特别注意...

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • 形参与实参的区别

    形参与实参详解 总结:    1.java的基本数据类型是传值调用,对象引用类型是传引用。    2.当传值调用时...

  • PHP开发经验总结

    请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用? 按值传递:函数范围内对值的任何改变在函数外部都...

  • JavaScript学习 之 传值or传引用

    目录 引言 传值? 传引用? 基础类型传值-对象类型传引用? 传共享! 小结 引言 JavaScript的函数参数...

网友评论

      本文标题:Java传值与传引用

      本文链接:https://www.haomeiwen.com/subject/bctdtqtx.html