美文网首页
Java解惑之值传递or引用传递

Java解惑之值传递or引用传递

作者: sofarsogoo_932d | 来源:发表于2018-03-31 20:35 被阅读0次

在说这个问题之前,我们先来看以下几段代码

基本数据类型

public class Test3 {

public void aa(int num){
    num=20;
}

public static void main(String[] args) {
    int num=10;
    Test3 t3=new Test3();
    t3.aa(num);
    System.out.println(num);
}
}

输出结果:10

结果分析
当我们将num传递进去之后,实际上aa对num做了一个拷贝,copy后的值与原来的值没有关系了,故输出10。

数组类型

public class Test3 {

public void bb(int[] arr){
    arr[0]=1;
}

public static void main(String[] args) {
    int[] arr={3,4,5};
    t3.bb(arr);
    System.out.println(arr[0]);
}
}

输出结果:1

我们在对bb方法做一个修改

public void bb(int[] arr){
    //arr[0]=1;
    int[] arr2={1,2,3};
    arr=arr2;
}

结果分析
对于数组而言,当我们创建一个数组之后,jvm为数组分配了三个连续的内存空间,这个arr就指向这片内存空间。方法bb得到的是数组的引用的一个拷贝
情况1修改了第一个空间块中的内容,故输出的是修改后的内容
情况2只是将arr的引用指向了另一片内存空间,原本的那片内存空间并未发生变化。

String类型

public class Test3 {

public void cc(String str){
    str="cba";
}

public static void main(String[] args) {
    String str="abc";
    t3.cc(str);
    System.out.println(str);
}  
}

输出结果:abc

结果分析
String属于引用类型,传递的参数就是字符串所在的地址的一个拷贝,而方法cc实际上只是将这个拷贝的值指向了另一个地址,原本的那个地址并没有受到影响。

对象类型
对象类型的结果和数组,String一样,在这里我就不分析了。

总结
无论是基本类型还是引用类型,在方法传参时,都有一个拷贝的过程。
基本数据类型传递的是值的一个拷贝
引用类型传递的是引用的一个拷贝
不管是值传递还是引用传递,形参拿到的仅仅是实参的副本,而不是实参本身。

回到最初的问题,java是值传递还是引用传递了?
这个就看怎么理解了,我也不好说,但无论是什么传递,我们只要记住,方法在传递参数时,拿到只是实参的一个拷贝就行了。

相关文章

  • Java解惑之值传递or引用传递

    在说这个问题之前,我们先来看以下几段代码 基本数据类型 输出结果:10 结果分析当我们将num传递进去之后,实际上...

  • [译] Java 值传递 VS 引用传递

    Java是值传递还是引用传递一直都有争论,我们最终下个结论,Java是值传递而不是引用传递。如果Java是引用传递...

  • 自整理3 值传递和引用传递

    java的值传递和引用传递 首先,由于java没有指针机制,所有java归根究底只有值传递,没有引用传递。java...

  • 聊聊Java内部类

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

  • Java值传递、数据加密

    值传递 Java 基本类型值传递,引用类型值传递 内存图解:

  • Java面试题疑难点

    1. java值传递和引用传递 String为什么是值传递而不是引用传递 答:String是final的

  • Java 与值传递

    问: 什么是值传递?什么是引用传递?为什么说 Java 中只有值传递? 一、值传递与引用传递 实参与形参: 实际参...

  • Java值传递

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

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • 快速区别值传递和引用传递

    复习Java知识的时候又看到值传递和引用传递的区别,然后就查询一下,结果都是Java到底是值传递还是引用传递之争,...

网友评论

      本文标题:Java解惑之值传递or引用传递

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