首页 > 其他分享 >方法的实参和形参

方法的实参和形参

时间:2024-07-31 11:30:03浏览次数:11  
标签:副本 形参 对象 传递 引用 实参 方法 public

值传递


"值传递"(Pass by Value)是指在调用方法时,将参数的值复制并传递给方法中的形参。这意味着方法接收的是原始数据的一个副本,而不是原始数据本身。以下是值传递的一些关键特点:

  1. 数据复制:当调用方法时,参数的值被复制到新内存区域(方法的栈空间)的形参中。

  2. 独立性:方法内的形参和方法外的实参在内存中是独立的。方法对形参的修改不会影响到实参。

  3. 基本数据类型:对于Java等语言中的原始数据类型(如int, double, char等),总是通过值传递。

  4. 不可变性:由于基本类型的不可变性,方法内对参数值的修改实际上并不改变原始数据。

  5. 内存效率:对于大型对象或数组,值传递可能意味着复制大量数据,这可能不是最内存效率的方式。

  6. 对象引用:对于对象引用类型,值传递的是引用的副本,而不是对象本身。这意味着两个引用指向同一个对象,但副本引用和原始引用是独立的,改变副本引用不会影响原始引用。

  7. 副作用:值传递不保证方法内部对参数的修改对外部可见,除非参数本身是一个对象,并且方法修改了对象的内部状态。

示例:

public class PassByValueExample {
    public static void main(String[] args) {
        int a = 10;
        modifyValue(a);
        System.out.println("Outside method: " + a); // 输出不会改变,仍然是 10
    }

    public static void modifyValue(int value) {
        value = 20; // 仅修改了传入的副本,不影响原始变量
    }
}

示例解释:

  • main 方法中,我们有一个原始数据类型 int a,其值为 10。
  • 调用 modifyValue 方法,并传递 a 作为参数。
  • modifyValue 方法内,我们尝试修改参数 value 的值为 20。但这只是修改了 value 的副本,原始变量 a 的值不会改变。
  • 打印 a 的值,输出结果仍然是 10,表明方法内的修改没有影响外部的 a

值传递是大多数编程语言在参数传递时采用的机制,它有助于保护原始数据不被方法内部的修改影响。然而,对于对象引用,需要理解传递的是引用的副本,而不是实际的对象本身。

引用转递


引用传递(Pass by Reference)是指在调用方法时,传递的是对象的引用(或地址),而不是对象本身的拷贝。这意味着方法接收的是原始对象的引用,因此方法内部对对象所做的任何修改都会影响到原始对象。

引用传递的特点:

  1. 传递引用:方法接收的是对象引用的副本,但这个副本指向的是同一个对象。
  2. 共享对象:方法内对对象的修改会反映到原始对象上,因为它们共享同一个对象。
  3. 修改可见:方法内部对对象属性的修改在方法外部是可见的。
  4. 对象不变:对象本身不会被复制,只有引用被传递,因此节省内存。
  5. 基本数据类型:对于基本数据类型(如 int, double 等),大多数语言(包括Java)实际上是通过值传递。
  6. 对象类型:对于对象类型,传递的是引用的副本,但两个引用指向同一个对象。

示例:

public class PassByReferenceExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        modifyPerson(person);
        System.out.println("Outside method: " + person.getName() + ", " + person.getAge());
    }

    public static void modifyPerson(Person p) {
        p.setName("Bob"); // 修改对象的属性
        p.setAge(40); // 修改对象的属性
    }

    static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

示例解释:

  • main 方法中,创建了一个 Person 对象 person
  • 调用 modifyPerson 方法,并传递 person 作为参数。
  • modifyPerson 方法内,修改了传入对象 pnameage 属性。
  • 这些修改会影响原始对象 person,因为 p 是对原始对象引用的副本。
  • 打印 person 的信息,输出结果将反映方法内的修改:"Outside method: Bob, 40"。

注意:

  • 在Java中,所有的参数传递都是通过值传递,包括对象的引用。因此,有时人们可能会混淆“引用传递”和“值传递”的概念。
  • 当你传递一个对象的引用时,你实际上是传递了这个引用的副本,但这个副本指向同一个对象。因此,任何通过这个副本引用对对象所做的修改都会反映到原始对象上。

标签:副本,形参,对象,传递,引用,实参,方法,public
From: https://www.cnblogs.com/czj03/p/18334244

相关文章

  • 方法
    方法1.方法的作用使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性2.方法的定义方法的命名规则1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。2.下......
  • 方法的定义
    方法的定义在Java中,静态方法(StaticMethods)和成员方法(通常指的是非静态方法,即InstanceMethods)是两种不同类型的方法,它们在定义、调用方式以及使用场景上存在差异。静态方法(StaticMethods)定义:静态方法是使用static关键字修饰的方法。它们属于类本身,而不是类的实例。静态方......
  • 论文阅读:引入词集级注意力机制的中文命名实体识别方法
    WSA-CNER方法首先,将输入序列的每个字映射成一个字向量;然后,将外部词汇信息整合到每个字的最终表示中;最后,将字的最终表示输入到序列建模层和标签预测层中,得到最终的预测结果。输入表示层使用SoftLexicon方法将输入序列中每个字的词典匹配结果划分为4个词集(BMES)。输入序列......
  • 方法的作用
    方法的作用在Java中,方法(Method)是执行特定操作或任务的代码块。它们是面向对象编程(OOP)的基石之一,允许你将代码组织成可重用、可维护和可测试的部分。方法的作用包括但不限于以下几点:代码重用:通过定义方法,你可以避免在多个地方编写相同的代码。当你需要在程序的多个地方执行相同......
  • iPhone 上的误删的联系人去哪了?如何从 iPhone 上找回联系人的 4 种方法
     如果您丢失了所有iPhone联系人,那将是一场灾难,因为许多人没有记住电话号码的习惯。iPhone联系人恢复可以让整个过程变得更容易。如果您仍然对如何在iPhone上恢复联系人感到困惑,您可以找到有关5个出色解决方案的更多详细信息。只需阅读涵盖您想知道的所有内容的文章即可......
  • 无法从Android恢复删除的文件该怎么办?5 个方法可以学习参考下
    Android设备已成为我们生活中不可或缺的一部分,充当重要文件、照片和文档的存储中心。但是,意外时有发生,有时我们会不小心从Android设备中删除重要文件。好消息是,有一些方法可以从Android恢复永久删除的文件。在这篇博文中,我们将探讨各种方法和解决方案,以帮助您检索有价值的数据......
  • PHP框架中用户认证和授权的实现方法与示例
    本文由ChatMoney团队出品在Web开发中,用户认证(Authentication)和授权(Authorization)是构建安全应用程序的核心组件。用户认证是验证用户身份的过程,确保用户是他们声称的那个人。而授权则是确定已认证用户是否有权访问特定资源或执行特定操作的过程。PHP框架通过提供内置机制或集......
  • java String 方法总结
    在Java中,String类是一个非常重要的类,用于创建和操作字符串。String类被设计为不可变的(immutable),即一旦一个字符串被创建,包含在这个对象中的字符序列就不能被改变。下面是一些常用的String方法总结:1.获取字符串信息length():返回字符串的长度。charAt(intindex):返回......
  • 方法相关
    方法1.方法的作用Java中方法(或函数)的作用是多方面的,它们是实现面向对象编程(OOP)核心概念的重要工具。以下是Java中方法的一些主要作用:代码重用:方法允许你将代码组织成可重用的单元。一旦你定义了一个方法,你就可以在程序的多个地方调用它,而无需重复编写相同的代码。这不仅可以......
  • 如何检查具体方法是否遵守抽象方法的类型提示
    这是一个由两部分组成的问题,但第二部分依赖于第一部分。出于教育目的,我试图为组实现一个抽象基类和测试套件(概念来自抽象代数)。代数群定义的一部分相当于类型约束,我想在ABC上实现该类型约束,并且如果具体类上的方法不符合该约束,就会有一些抱怨。I对于逻辑......