zoukankan      html  css  js  c++  java
  • JAVA参数传递

    参数传递

    Java 的参数是以值传递的形式传入方法中,而不是引用传递。

    以下代码中 Dog dog 的 dog 是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。

    public class Dog {
    ​
        String name;
    ​
        Dog(String name) {
            this.name = name;
        }
    ​
        String getName() {
            return this.name;
        }
    ​
        void setName(String name) {
            this.name = name;
        }
    ​
        String getObjectAddress() {
            return super.toString();
        }
    }

    在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。

    class PassByValueExample {
        public static void main(String[] args) {
            Dog dog = new Dog("A");
            func(dog);
            System.out.println(dog.getName());          // B
        }
    ​
        private static void func(Dog dog) {
            dog.setName("B");
        }
    }

    但是在方法中将指针引用了其它对象,那么此时方法里和方法外的两个指针指向了不同的对象,在一个指针改变其所指向对象的内容对另一个指针所指向的对象没有影响。

    public class PassByValueExample {
        public static void main(String[] args) {
            Dog dog = new Dog("A");
            System.out.println(dog.getObjectAddress()); // Dog@4554617c
            func(dog);
            System.out.println(dog.getObjectAddress()); // Dog@4554617c
            System.out.println(dog.getName());          // A
        }
    ​
        private static void func(Dog dog) {
            System.out.println(dog.getObjectAddress()); // Dog@4554617c
            dog = new Dog("B");
            System.out.println(dog.getObjectAddress()); // Dog@74a14482
            System.out.println(dog.getName());          // B
        }
    }

    StackOverflow: Is Java “pass-by-reference” or “pass-by-value”?

    引用:cs-note in github

  • 相关阅读:
    redis 安装配置
    ORM 效率补充
    function*
    路由器
    nodejs开发辅助工具nodemon
    npm淘宝镜像配置
    Node中的模块系统
    artTemplate不仅可以在浏览器中使用,还可以在node中使用
    代码风格JavaScript standard style与Airbnb style
    osChina.net工具
  • 原文地址:https://www.cnblogs.com/fanbi/p/15243748.html
Copyright © 2011-2022 走看看