当前位置: 首页 > article >正文

Java基础--->基础部分(2)【Java值传递】

文章目录

  • Java 值传递
  • 基本类型参数的传递
  • 引用类型参数的传递1
  • 引用类型参数的传递2
  • 问什么不引入引用传值呢?

Java 值传递

Java 中的值传递主要使用的参数有形参和实参
实参定义的参数,已经实际存在可以直接拿来使用
形参指的是在使用函数时需要传递进函数的参数,用于接收实参,没有确定的值


在 Java 中只有值传递,没有引用传递。
值传递方法接收到的是实际的值,引用传递是方法接收到的是实参所引用的对象在堆中的地址,对形参的修改将影响实参。

举例

String hello = "Hello!";
// hello 为实参
sayHello(hello);
// str 为形参
void sayHello(String str) {
    System.out.println(str);
}

基本类型参数的传递

先看下面一段代码

public static void main(String[] args) {
  int num1 = 10;
 int num2 = 20;
swap(num1, num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
public static void swap(int a, int b) {
  int temp = a;
 a = b;
b = temp;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
**输出**
a = 20
b = 10
num1 = 10
num2 = 20

这段代码表现的是一个基本类型参数的传值,在swap方法中,虽然对方法内两个数字进行了交换,但是并不会影响到num1、num2,因为方法内部的两个值只是从传来的实参中复制进来的,也就相当于实参的副本,副本内容无论怎么修改并不会影响其本身的内容。

引用类型参数的传递1

再看一段代码

	public static void main(String[] args) {
     int[] arr = { 1, 2, 3, 4, 5 };
     System.out.println(arr[0]);
     change(arr);
     System.out.println(arr[0]);
	}
	public static void change(int[] array) {
     // 将数组的第一个元素变为0
     array[0] = 0;
	}
	**输出**
	1
	0

从这段代码可以看出,数组中的值发生了改变,实际上传递的还是数组的值,只不过这个值是实参的地址,也就是传递进来的数组对象和实参对象指向的都是同一个数组对象,这就可以说明为什么方法内部修改会影响到实参。

引用类型参数的传递2

再看一段代码

public class Person {
   private String name;
  // 省略构造函数、Getter&Setter方法
}
public static void main(String[] args) {
  Person xiaoZhang = new Person("小张");
 Person xiaoLi = new Person("小李");
swap(xiaoZhang, xiaoLi);
System.out.println("xiaoZhang:" + xiaoZhang.getName());
System.out.println("xiaoLi:" + xiaoLi.getName());
}
public static void swap(Person person1, Person person2) {
  Person temp = person1;
 person1 = person2;
person2 = temp;
System.out.println("person1:" + person1.getName());
System.out.println("person2:" + person2.getName());
}
**输出**
person1:小李
person2:小张
xiaoZhang:小张
xiaoLi:小李

在这段代码中可以看出,swap 方法的参数 person1 和 person2 只是拷贝的实参 xiaoZhang 和 xiaoLi 的地址。
因此, person1 和 person2 的互换只是拷贝的两个地址的互换罢了,并不会影响到实参 xiaoZhang 和 xiaoLi 。

问什么不引入引用传值呢?

出于安全考虑,方法内部对的操作,对于调用者都是未知的


http://www.kler.cn/news/18149.html

相关文章:

  • 项目搭建—常用的插件
  • 基于R语言APSIM模型
  • 国民技术N32G430开发笔记(19)- IAP 升级 I2C1 从机收发数据
  • 本地字体库的引入方法
  • 程序设计的三种结构-C中实现其的6条语句
  • 数据导向下制造业的生产效率、交易效率提升办法
  • 【ESD专题】案例:TVS管钳位电压能不能通过TLP测试数据表征?
  • 【CMIP6月、日数据】【ERA5-LAND陆面再分析数据】【全球VIPPHEN物候数据】
  • javaScript---设计模式-设计模式概论
  • TypeScript基础
  • Chapter 7:XDC Precedence (ug903)
  • TreeMap源码分析,Collections工具类的使用
  • 相对路径的详细用法
  • 行为型模式-中介者模式
  • 武忠祥老师每日一题||定积分基础训练(十)
  • 9大Python常用技巧 经验之谈
  • 安全访问服务边缘 (SASE) 技术的优缺点及工作原理
  • 基于海鸥算法改进的随机森林回归算法 - 附代码
  • 美句分享~程序员的放松时间~
  • 并发编程01:基础篇
  • Linux常用命令,你需要了解多少呢?
  • Java字符串的用法、原理、性能分析和总结
  • 杜甫经典长诗“三吏”“三别”赏析
  • FAST协议解析2 FIX Fast Tutorial翻译【PMap、copy操作符】
  • 代码随想录算法训练营day30 | 332. 重新安排行程,51. N 皇后,37. 解数独
  • Ubuntu22.04.2 LTS 安装nvidia显卡驱动及配置pytorch
  • David Silver Lecture 4: Model-Free Prediction
  • 【Java|golang】2432. 处理用时最长的那个任务的员工
  • ES堆内存:大小和交换
  • Mermaid流程图