zoukankan      html  css  js  c++  java
  • Java沉思录之参数传递

    Java中方法参数传递方式其实只有一种,就是按值传递。即传递变量所代表的值的副本
    如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
    如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

    对于String类型

    void change(String b) {
    	b = “b”;
    }
    main () {
    	String a = “a”;
    	change(a);
    	System.out.print(a);//a的值还是”a”;
    }
    

    传递的是String a 对象的地址值的一个拷贝给b,b也指向堆内存中的”a”。但是 b = “b”,由于String是final、immutable类型的,只是修改了b的指向,使b指向了堆内存的”b”。所以打印a对象的内容并没有改变。

    对于自定义类型

    class User{
        String name;
    }
    void change1(User b) {
        User u = new User();
    	u.name = “u”;
    	b = u;
    }
    void change2(User b) {
    	b.name = “b”;
    }
    
    main() {
    	User a = new User();
        change1(a);
    	System.out.print(a.name);//输出"a"
    	change2(a);
    	System.out.print(a.name);//输出"b"
    }
    

    传递的是User a对象的地址值的一个拷贝,a、b同时指向堆内存的同一个地方。使用change1()方法改变的是拷贝的指向内容,不影响原来对象指向的内容。但是使用change2()方法,b.name = “b”,对堆内存中原来对象的内容进行了操作,改变了属性name的值。所以打印a.name发现值发生了改变。

  • 相关阅读:
    D
    pat 甲级 1003 Emergency(最短路计数)
    Goldbach
    pta 1148 Werewolf
    CodeForces
    pta 1144 The Missing Number
    2020团体程序设计天梯赛 L1-3 洛希极限
    2020团体程序设计天梯赛 L1-2 猫是液体
    2020团体程序设计天梯赛 L1-1 嫑废话上代码
    2020年团体程序设计天梯赛-题解
  • 原文地址:https://www.cnblogs.com/universal/p/10452554.html
Copyright © 2011-2022 走看看