• Java中的参数传递 --Java


    1、基本类型传值,对象类型传地址

    按值传递:当将一个参数传递给一个方法时,方法接收的是原始值的一个副本。因此,如果方法修改了该参数,仅改变副本,而原始值保持不变。

    按引用传递:当将一个参数传递给一个方法时,方法接收的是原始值的内存地址,而不是值的副本。因此,如果方法修改了该参数,调用代码中的原始值也随之改变。

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

    2、验证基本类型传值

    /**
    * 基本类型传值
    * @author Thanlon
    */
    public class PassValAndAddr {
      public void testMethod(int a) {
        a = 5;//对传过来的a赋予新值
        System.out.println("testMethod方法中:a=" + a);
      }

      public static void main(String[] args) {
        PassValAndAddr passValAndAddr = new PassValAndAddr();
        int a = 3;
        passValAndAddr.testMethod(a);
        System.out.println("main方法中:a=" + a);
      }
    }

    控制台打印:

    testMethod方法中:a=5
    main方法中:a=3

    在接收参数的方法中修改了传递过来的值,但这个值只是原始值的副本,原始值不会发生改变。

    3、验证对象类型传地址

    PassValAndAddr2 .java:

    /**
    * 对象类型传递地址
    * @author Thanlon
    */
    public class PassValAndAddr2 {
      public void passAddr(ObjectA a) {
        a.age = 22;
        System.out.println("传递对象给passAddr方法对象的age属性值为:" + a.age);
      }

      public static void main(String[] args) {
        PassValAndAddr2 passValAndAddr = new PassValAndAddr2();
        ObjectA objectA = new ObjectA();
        passValAndAddr.passAddr(objectA);
        System.out.println("objectA原始的age值为:" + objectA.age);
      }
    }

    PassValAndAddr2 .java:

    public class ObjectA {
      public int age = 0;
    }

    控制台打印:

    传递对象给passAddr方法,对象的age属性值为:22
    objectA原始的age值为:22

    在接收参数的方法中修改了传过来的对象的age属性,原来对象的age属性值发生了改变,说明方法接收的是原始值的内存地址,而不是值的副本。

    注意:在Java中只有基本类型和按照下面这种定义方式的String类型数据是按值传递,其它的都是按引用传递。

    直接使用双引号定义字符串方式:String str = "Java"

  • 相关阅读:
    Android 列表之分组ListView
    【转】容易忽视但是功能灰常强大的Java API
    onSaveInstanceState和onRestoreInstanceState的用处
    asp.net中url重写
    泛型数据类型转换
    关于 url重写后性能问题
    用CSS实现新闻轮播效果
    Java命名规范(简略)
    关于ngclass中添加多个样式类的解决方案
    python 常用标准库
  • 原文地址:https://www.cnblogs.com/qikeyishu/p/10265490.html
Copyright © 2020-2023  润新知