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

news/2024/11/15 2:05:58/

文章目录

  • 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) {// 将数组的第一个元素变为0array[0] = 0;}**输出**10

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

引用类型参数的传递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.ppmy.cn/news/62911.html

相关文章

MQ(面试问题简析)学习笔记

文章目录 1. 为什么使用消息队列2. 消息队列有什么优缺点3. Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?4. 如何保证消息队列的高可用4.1 RabbitMQ 的高可用性4.2 Kafka 的高可用性 5. 如何保证消息不被重复消费(如何保证消息消费的幂等性&#…

从不同视角来看待API数据接口

一、作为产品经理向客户推广API数据接口,需要注意以下几点: 1.了解目标客户:在推广API数据接口之前,首先需要了解目标客户的需求和痛点,针对客户的实际情况提供更具体化的解决方案。 2.强调API接口的价值&#xff1a…

浅谈线程池

浅谈线程池 1、线程池 1.1、线程池介绍 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程…

物联网|蓝牙4.0BLE协议栈简介|IAR集成开发环境简介|IAR各版本下载链接|物联网之蓝牙4.0 BLE基础-学习笔记(2)

文章目录 3、蓝牙4.0BLE协议栈简介Tips: BLE协议结构图介绍Tips IAR各版本下载链接 3、蓝牙4.0BLE协议栈简介 问题: 1、什么是LE协议栈?BLE协识栈与BLE协议的关系? 协议:机器之间的通讯标准,定义了一系列的通信标准,通信双方都按…

4. Mysql索引优化实战一

一条SQL在MySQL中是如何执行的 1. 示例表举一个大家不容易理解的综合例子 本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 本节课内容: 索引下推优化详解Mysql优化器索引选择探究索引优化Order…

61.网页设计规则#7_元素之间的空白

为什么需要空白? 适度的空白使设计看起来整洁、现代和精致。空白传达不同片段信息之间的关系。空白意味着布局元素之间存在看不见的关系。 如何去使用空白? 各部分之间使用大量的空白; 元素组之间使用大量的空白。 在各个元素之间使用空白…

【Leetcode -405.数字转换为十六进制数 - 409.最长回文串】

Leetcode Leetcode -405.数字转换为十六进制数Leetcode - 409.最长回文串 Leetcode -405.数字转换为十六进制数 题目:给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意 : 十六进制中所有…

cmake编译

cmake_minimum_required (VERSION 2.8)project (demo)##第一个是生成后的名称, 后面包含所有源文件 add_executable(main main.c testFunc.c)##cmake提供了一个命令可以把指定目录下所有的源文件存储在一个变量中 aux_source_directory(. SRC_LIST) ##将当前位置的…