首页 > 编程语言 >Java 是值传递还是引用传递,又是怎么体现的?

Java 是值传递还是引用传递,又是怎么体现的?

时间:2024-09-13 17:24:20浏览次数:12  
标签:Java name person 传递 Person 引用 public

一、基本概念

值传递是指在方法调用时,将实际参数的值复制一份传递给方法的形式参数。对形式参数的修改不会影响实际参数的值。

引用传递则是将实际参数的引用(内存地址)传递给方法的形式参数,在方法中对形式参数所指向的对象进行修改会影响到实际参数所指向的对象。

二、Java 中的体现

  1. 基本数据类型参数传递
    • 当把一个基本数据类型(如 int、double、char 等)作为参数传递给方法时,是值传递。
    • 例如:

java

     public class ValuePassingExample {
         public static void main(String[] args) {
             int num = 10;
             changeValue(num);
             System.out.println(num); // 输出仍然是 10
         }

         public static void changeValue(int value) {
             value = 20;
         }
     }

  • 在这个例子中,把 num 的值 10 传递给了 changeValue 方法的参数 value。在 changeValue 方法中,虽然将 value 的值改为了 20,但这并不会影响到 main 方法中的 num。因为这里只是将 num 的值复制了一份传递给了 value,对 value 的修改不会影响到 num
  1. 引用数据类型参数传递
    • 当把一个引用数据类型(如对象、数组等)作为参数传递给方法时,实际上传递的是对象的引用(内存地址)的值。但从本质上来说,仍然是值传递。
    • 例如:

java

     class Person {
         String name;
         public Person(String name) {
             this.name = name;
         }
     }

     public class ReferencePassingExample {
         public static void main(String[] args) {
             Person person = new Person("Alice");
             changePerson(person);
             System.out.println(person.name); // 输出可能是 Bob
         }

         public static void changePerson(Person p) {
             p.name = "Bob";
         }
     }

  • 在这个例子中,把 Person 对象的引用传递给了 changePerson 方法的参数 p。在 changePerson 方法中,通过 p 引用修改了对象的 name 属性。在 main 方法中输出 person.name 时,发现其值被改变了。这并不是因为引用传递,而是因为两个引用(person 和 p)指向了同一个对象。在方法中通过引用修改了对象的内容,但如果在方法中重新给引用赋值,指向一个新的对象,那么原引用(在 main 方法中的引用)不会受到影响。
  • 例如:

java

     class Person {
         String name;
         public Person(String name) {
             this.name = name;
         }
     }

     public class ReferencePassingExample {
         public static void main(String[] args) {
             Person person = new Person("Alice");
             changePerson(person);
             System.out.println(person.name); // 输出仍然是 Alice
         }

         public static void changePerson(Person p) {
             p = new Person("Bob");
         }
     }

  • 在这个修改后的例子中,在 changePerson 方法中重新给 p 赋值为一个新的 Person 对象,但这并不会影响到 main 方法中的 person 引用。因为这里只是把 p 指向了一个新的对象,而 person 仍然指向原来的对象。

综上所述,Java 中只有值传递,无论是基本数据类型还是引用数据类型,都是将实际参数的值复制一份传递给方法的形式参数。对于引用数据类型,虽然传递的是对象的引用,但对引用的操作本质上还是值传递的体现。

标签:Java,name,person,传递,Person,引用,public
From: https://blog.csdn.net/weixin_71842181/article/details/142216154

相关文章

  • 基于Java部门办公网站系统的设计与开发的计算机毕设
    摘 要本次课程设计主要是针对于学校教研信息的登记管理归档根据实际工作流程做出适合实际工作的,能够减少工作流程的工作量,有效的提高工作效率的网站系统。本次设计在开始的前台界面设计时主要是使用DIV+CSS布局样式,设计时能灵活准确的定位每一个模块的位置,在程序语言上使用的是ja......
  • JAVA国际版同城服务系统:满足全球用户需求的解决方案
    随着全球化的加速和互联网的普及,人们对同城服务的需求日益增长,要求也越来越高。为了满足全球用户的需求,JAVA国际版同城服务系统应运而生。该系统以JAVA技术为核心,致力于提供高效、稳定、安全的服务,让用户在全球任何角落都能享受到贴心、便捷的同城服务。JAVA国际版同城服务系统采用......
  • 白骑士的Java教学介绍篇 1.1 Java简介
            欢迎来到Java编程的世界!无论你是编程新手还是有一定经验的开发者,学习Java都将为你打开一个广阔的编程领域。Java作为一种功能强大且广泛使用的编程语言,自诞生以来便以其平台无关性、面向对象的特性和丰富的生态系统赢得了全球开发者的青睐。在本篇博客中,我们将......
  • 基于JAVA超市管理系统的计算机毕设
    目录摘要Abstract1绪论1.1社会背景1.2超市背景1.3系统开发背景1.4课题研究的目的和意义1.5系统功能特点1.6本文主要工作2系统可行性研究2.1技术可行性研究2.1.1采用java语言编写2.1.2采用Eclipse开发平台2.1.3采用Access数据库2.2经济可行性研究2.3操作可行性研究3......
  • 什么是Java 语法糖?
    Java语法糖(syntacticsugar)是指一些方便开发者使用的语法形式,它们在编译时会被转换为更加基础或复杂的代码。语法糖的目的在于简化代码编写,提高代码的可读性和可维护性,而不会改变程序的功能或性能。以下是几个Java中常见的语法糖示例:增强的for循环(for-each)int[]numbers......
  • Day08.Java数组
    Java数组数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排序组合而成其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们数组的声明和创建首先必须声明数组变量,才能在声明中使用数组dataType[]array......
  • A178-基于java+springboot+vue开发的租房网站(源码+数据库+LW+部署文档)
    功能介绍平台采用B/S结构,后端采用主流的Springboot框架进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、房屋详情页、门票订单、用户中心模块。后台功能包括:总览、订单管理、房屋管理、分类管理、设施管理、评论管理、用户管理、......
  • Java 开发中锁的选择与使用
    Java开发中锁的选择与使用1.引言2.Java中的锁机制3.synchronized关键字示例好处注意点4.ReentrantLock类示例好处注意点5.ReadWriteLock接口示例好处注意点6.Atomic类示例好处注意点7.锁的选择与对比1.引言在并发编程中,锁是一种常见的机制,用于......
  • Java面试随手记3
    一、面试题总结31、mysql中char和varchar的区别?特性charvarchar存储方式定长,长度不足时填充空格可变长,按实际长度存储存储效率固定空间,浪费内存根据实际长度动态分配性能较高,适合固定长度数据稍低,适合不定长度数据适用场景固定长度的字符串不定长度的字符串空格处理自动去......
  • Java
    在Java中变量需要初始化,不然系统会报错,在Java中生成随机数,需要运用random这个工具,也是需要办含头文件,()里面是需要生成随机数的范围 Java输入一个数需要到scanner这个工具,需要包含头文件,需要输入什么类型,就在next后面加上类型名字就可以了,读取完后需要关闭这个文件  在Jav......