zoukankan      html  css  js  c++  java
  • java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)

    代码部分:

        public static void main(String[] args) {
            testInt();
            testString();
            testArray();
            testX();
        }
    
        public static void testInt() {
            int a = 1;
            int b = a;
            a = 2;
            System.out.println("b = "+b);
            changeInt(a);
            System.out.println("a = "+a);
        }
    
        public static void testString() {
            String a = "1";
            String b = a;
            a = "2";
            System.out.println("b = "+b);
            changeString(a);
            System.out.println("a = "+a);
        }
    
        public static void testArray() {
            int[] a = {1,2,3};
            int[] b = a;
            a[0] = 2;
            System.out.println("b[0] = "+b[0]);
            changeArray(a);
            System.out.println("a[0] = "+a[0]);
        }
    
        public static void testX() {
            X a = new X("1");
            X b = a;
            a.setValue("2");
            System.out.println("b.value = "+b.getValue());
            changeX(a);
            System.out.println("a.value = "+a.getValue());
        }
    
    
        static void changeInt(int a) { a = 100;}
    
        static void changeString(String a) { a = "100";}
    
        static void changeArray(int[] a) { a[0] = 100;}
    
        static void changeX(X a) { a.setValue("100");}
    

    输出结果补充,如下:

    b = 1
    a = 2
    b = 1
    a = 2
    b[0] = 2
    a[0] = 100
    b.value = 2
    a.value = 100
    

    结果分析:

    将数据赋值或当做参数传递的时候:
    1,对于基本数据类型,String类, Integer, Double等immutable的类型 都是 值传递;
    2,对于数组,其他类等,都是引用传递;

    图形表达:

    //2018-9-17更新
    如果非要谈论是否java里只有值传递,可以把引用传递看成:实际上传递了引用的值。
    补充代码与输出如下

    
    
    public static void testX02() {
        X a = new X("1");
        changeX02(a);
        System.out.println("a.value = "+a.getValue());
        }
    
    static void changeX02(X a) {
        a = new X("");
        a.setValue("100");
    }
    
    

    上方代码输出结果:a.value = 1
    也就是说testX02中的a,仍然指向最初定义value为“1”的对象;
    当做参数调用changeX02后,只能通过引用去改变对象,不能去改变其指向对象;
    所以传递的是引用的复制,也就是上图中的黄色箭头。

  • 相关阅读:
    http 各个状态返回值
    【转载】关于HttpClient 接口方法总结
    httpclient httpcore jar包及源码
    commons.httpclient-3.X.jar 和 httpclient-4.x.jar是个什么关系?
    【转载】深入浅出REST
    httpclient 用户名密码认证实例
    java发送http请求,内容为xml格式&&传统URI类请求
    RESTful Java client with Apache HttpClient / URL /Jersey client
    MySQL命令行--导入导出数据库
    为什么有时候 php 没有写闭合标签结束符?
  • 原文地址:https://www.cnblogs.com/kangkaii/p/8419094.html
Copyright © 2011-2022 走看看