美文网首页
java按值传递

java按值传递

作者: 李虎子 | 来源:发表于2018-02-26 18:14 被阅读0次

public class Test {

public static void main(String[] args) {

int a =0;

        String b ="b";

        StringBuilder c =new StringBuilder("c");

        test(a,b,c);

        System.out.println("a = " + a +",b = " + b +",c = " + c);

    }

public static void test(int a, String b, StringBuilder c) {

a = a +1;

        b = b +"1";

        c = c.append(1);

    }

}

这是遇到的面试题。当时我的回答是a = 1,b = b1,c = c1。

so,当然这个是错的。回来run了一下程序,答案是a = 1,b = b,c = c1。

然后和同学讨论了一下,加上百度,发现要理解这个答案,并不容易。这里仅仅了解按值传递这个概念是不够的,这里设计到的java基础知识还包括对象引用和对象的关系,形参和实参的关系。

String b = "b"中,String b创建了一个对象引用,"b"则是创建了一个对象(在内存中开辟了一块区域),= 号则讲对象引用指向了这个对象,换个说法就是对象引用保存了对象的内存地址。(这里只是简单介绍了对象引用和对象的关系)

调用一个函数,实参传递值给形参时,基本数据类型是直接拷贝一个新的值,引用类型则是拷贝一个内存地址,所以实参和形参指向的是同一个对象。String和StringBuilder都是引用类型,但是在test里对他们的操作其实是有区别的。

//这里是重点

b = b + "1",由于String具有不可变现,这个操作相当于创建了一个新的对象,所以这里形参是指向了一个新的对象。而c = c.append(1)并没有创建新的对象,还是对原有对象进行操作。

public class hello{

 public static void main(String[] args){

      int a = 0;

        String b = "b";

        StringBuilder c = new StringBuilder("c");

        int a1 = a;

        a1 = a1 +1;

        String b1 = b;

        b1 = b + "1";

        StringBuilder c1 = c;

        c1.append(1);

//      test(a,b,c);

        System.out.println("a = "+a+" b = "+b+" c = "+c);

}

或者把test里的方法放到外边写,效果也是一样的。b1 = b+"1",b1这个对象引用指向了新的对象。

相关文章

  • 聊聊Java内部类

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

  • 解读Java参数传递

    Java语言的传递方式只有“按值传递”!“按值传递”! “按值传递”!重要的事情要说三遍。不过呢,按值传递可能还不...

  • Java值传递

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

  • Java 参数的传递

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

  • [Java]按值传递/按引用传递?

    先上一段代码 PS: 字符串一旦创建,便不可修改 PPS: JVM内存可分为三个区,堆(Heap),栈(Stack...

  • Java按值传递

    1、方法传递的是基本数据类型 2、方法传递的是对象,修改的是对象数据和对象引用的不同

  • java按值传递

    public class Test { public static void main(String[] args...

  • Java调用方法时值传递的理解

    Java中方法调用时,没有按引用传递这个说法,只有按值传递。基本类型数据的传递和引用类型数据的传递,根本上都是按值...

  • Java按值还是引用传参

    Java的方法参数是按值传递的 基本类型传递的是字面值,引用类型传递的是地址值。也可以理解成,基本类型按值传递,引...

  • Java中的按值传递和按引用传递

    1.在java中传递基本数据类型是按值传递的2.在Java中传递对象是按"引用传递"的,引用传递是在C语言中的指针...

网友评论

      本文标题:java按值传递

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