java值传递和引用传递(附实例)

article/2025/9/12 23:52:05

java值传递和引用传递(附实例)

  • 1.数据类型
    • 1.1 基本数据类型
    • 1.2 引用数据类型
  • 2.形参与实参
    • 2.1 函数中使用
    • 2.2 调用
  • 3.值传递和引用传递
    • 3.1 定义
    • 3.2 例子
    • 3.3 结论

观前提示:

本文所使用的IDEA版本为ultimate 2019.1,JDK版本为1.8.0_141。

1.数据类型

1.1 基本数据类型

基本数据类型包括数值型(整数型和浮点型),字符型和布尔型

  1. 整数型:byte,short,int,long
  2. 浮点型:float,double
  3. 字符型:char
  4. 布尔型:boolean

以下程序代码展示了这些基本数据类型的位数、包装类、最大值、最小值。

package testBasicDataType;public class Test {public static void main(String[] args) {//byteSystem.out.println("数据类型为 :" + Byte.TYPE);System.out.println("二进制位数 :" + Byte.SIZE);System.out.println("包装类为 :" + Byte.class);System.out.println("最大值为 :" + Byte.MAX_VALUE);System.out.println("最小值为 :" + Byte.MIN_VALUE);System.out.println("\n");//shortSystem.out.println("数据类型为 :" + Short.TYPE);System.out.println("二进制位数 :" + Short.SIZE);System.out.println("包装类为 :" + Short.class);System.out.println("最大值为 :" + Short.MAX_VALUE);System.out.println("最小值为 :" + Short.MIN_VALUE);System.out.println("\n");//intSystem.out.println("数据类型为 :" + Integer.TYPE);System.out.println("二进制位数 :" + Integer.SIZE);System.out.println("包装类为 :" + Integer.class);System.out.println("最大值为 :" + Integer.MAX_VALUE);System.out.println("最小值为 :" + Integer.MIN_VALUE);System.out.println("\n");//longSystem.out.println("数据类型为 :" + Long.TYPE);System.out.println("二进制位数 :" + Long.SIZE);System.out.println("包装类为 :" + Long.class);System.out.println("最大值为 :" + Long.MAX_VALUE);System.out.println("最小值为 :" + Long.MIN_VALUE);System.out.println("\n");//floatSystem.out.println("数据类型为 :" + Float.TYPE);System.out.println("二进制位数 :" + Float.SIZE);System.out.println("包装类为 :" + Float.class);System.out.println("最大值为 :" + Float.MAX_VALUE);System.out.println("最小值为 :" + Float.MIN_VALUE);System.out.println("\n");//DoubleSystem.out.println("数据类型为 :" + Double.TYPE);System.out.println("二进制位数 :" + Double.SIZE);System.out.println("包装类为 :" + Double.class);System.out.println("最大值为 :" + Double.MAX_VALUE);System.out.println("最小值为 :" + Double.MIN_VALUE);System.out.println("\n");//charSystem.out.println("数据类型为 :" + Character.TYPE);System.out.println("二进制位数 :" + Character.SIZE);System.out.println("包装类为 :" + Character.class);System.out.println("最大值为 :" + (int) Character.MAX_VALUE);System.out.println("最小值为 :" + (int) Character.MIN_VALUE);System.out.println("\n");//booleanSystem.out.println("数据类型为 :" + Boolean.TYPE);System.out.println("包装类为 :" + Boolean.class);System.out.println("真值为 :" + Boolean.TRUE);System.out.println("假值为 :" + Boolean.FALSE);}
}

运行结果如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 引用数据类型

包括类、接口类型、数组类型、枚举类型、注解类型,字符串型

2.形参与实参

2.1 函数中使用

  1. 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。

  2. 实参出现在主调函数中,进入被调函数后,实参变量也不能使用。

2.2 调用

  1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

  2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

3.值传递和引用传递

3.1 定义

  1. 值传递
    在方法调用时,传递的参数是按值的拷贝传递。

  2. 引用传递
    在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

3.2 例子

例1

package testTransfer;public class Test {public static void main(String[] args) {int num = 10;num = 100;System.out.println(num);String str = "ab";str = "bd";System.out.println(str);}
}

运行结果如下
在这里插入图片描述
解析如下

基本数据类型是直接赋值,引用类型是重新开辟了一块新地址,并将新地址赋值回来。
在这里插入图片描述

例2

package testTransfer;import java.util.ArrayList;
import java.util.List;public class Test {public static void main(String[] args) {int num = 10;System.out.println("num改变前:" + num);changeNum(10);System.out.println("num改变后:" + num);String str = "ab";System.out.println("str改变前:" + str);changeStr(str);System.out.println("str改变后:" + str);List<String> list = new ArrayList<>();list.add("a");list.add("b");System.out.println("list.get(1)改变前:" + list.get(1));changeList(list);System.out.println("list.get(1)改变后:" + list.get(1));String[] strings = new String[]{"a", "b"};System.out.println("strings[1]改变前:" + strings[1]);changeStrArray(strings);System.out.println("strings[1]改变后:" + strings[1]);User user = new User();user.name = "张三";user.age = 30;System.out.println("user.name改变前:" + user.name);System.out.println("user.age改变前:" + user.age);changeUserName(user);changeUserAge(user);System.out.println("user.name改变后:" + user.name);System.out.println("user.age改变后:" + user.age);}private static void changeNum(int num){num = 100;}private static void changeStr(String str){str = "abcd";}private static void changeList(List<String> list){list.set(1,"cd");}private static void changeStrArray(String[] strings){strings[1] = "cd";}private static void changeUserName(User user){user.name = "李四";}private static void changeUserAge(User user){user.age = 31;}
}class User{String name;int age;
}

运行结果如下
在这里插入图片描述
解析如下

  1. 基本数据类型形参所传递的值,是这个实际值的拷贝,所以无论对这个拷贝赋其他任何值,都不会改变原值。

  2. 引用类型(除String外),传递的都是存储值的引用地址的拷贝(也就是传递前和传递后的引用相同),改变这个拷贝的引用地址指向的值,会改变原来值的内容。

3.3 结论

  1. 基本数据类型的操作都是值传递。由于原始内容和副本都是存储实际值,并且是在不同的栈区,因此形参的操作,不影响原始内容。

  2. 引用类型的数据进行操作,基本上(String除外)都是“引用传递”(对引用的地址的传递)。 分两种情况,一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。


http://chatgpt.dhexx.cn/article/iwmQgpRv.shtml

相关文章

java中的值传递和引用传递

个人理解&#xff0c;可能会有错误之处&#xff0c;请仔细甄别&#xff0c;谨慎参考&#xff01;如有错误或不同见解请指出&#xff01; 值传递&#xff08;Pass By Value或者Call By Value&#xff09;是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。…

【JAVA】值传递与引用传递

一.声明 Java中没有引用传递 二.值传递和引用传递 值传递&#xff1a;就是在方法调用的时候&#xff0c;实参是将自己的一份拷贝赋给形参&#xff0c;在方法内&#xff0c;对该参数值的修改不影响原来的实参。 引用传递&#xff1a;是在方法调用的时候&#xff0c;实参将自…

值传递与引用传递详解

1、关于值传递 值传递&#xff1a;是指在调用函数时&#xff0c;将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;就不会影响到实际参数 如下图所示&#xff0c;当传递参数之前会将参数进行复制&#xff0c;函数中修改了参数&#xff0c…

值传递与引用传递的区别

一、值传递&#xff1a;是指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到实际参数。 ​ 代码在内存中的执行流程&#xff1a; 1、首先加载main方法&#xff1b; ​ 2、接下来int number 100&#xff1…

什么是值传递,什么是引用传递?

1、什么是值传递&#xff0c;什么是引用传递&#xff1f; 值传递&#xff08;pass by value&#xff09;是指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到实际参数。引用传递&#xff08;pass by referenc…

Java复习总结之快速区分值传递和引用传递

引言 为了搞清楚值传递和引用传递的区别&#xff0c;查阅了许多资料&#xff0c;加以自身理解&#xff0c;做出本篇博客用于记录。 概念 值传递&#xff1a;指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到…

华为应聘进展状态码解析(附加性格测试攻略)

多方查找咨询终于终于看到了自己的状态码&#xff0c;总结一下~ 性格测试攻略&#xff1a; https://blog.csdn.net/guomutian911/article/details/48915301 https://blog.csdn.net/twc829/article/details/51226358 https://blog.csdn.net/twc829/article/details/51226247 第三…

华为OD机试2023 最新最全备考攻略助你轻松上岸

【华为OD机试真题 2022&2023】真题目录 点这里 【华为OD机试真题】信号发射和接收 &试读& 点这里 【华为OD机试真题】租车骑绿道 &试读& 点这里 什么是华为OD 华为OD是Outsourcing Dispacth模式&#xff0c;是华为和外企德科联合招聘的简称。目前华为大多…

idea 怎么导入maven项目

1、打开一个现有的IntelliJ IDEA工程&#xff0c;点击菜单的“File”->“new”->“Module from Existing Sources”。 更详细请点击&#xff1a;http://yayihouse.com/yayishuwu/chapter/1826

IntelliJ IDEA如何导入Gradle项目

https://blog.csdn.net/wangdong5678999/article/details/70255451 IntelliJ IDEA如何导入Gradle项目 栋先生 2017-04-20 10:14:03 95942 收藏 分类专栏&#xff1a; 其他 文章标签&#xff1a; idea intellij idea gradle 版权 最近学习Gradle&#xff0c;本文来重点介绍…

杂记——16.idea中导入maven项目

这篇文章我们来讲一下如何从Gitee上拉取项目&#xff0c;并将该项目导入到idea中 目录 1.拉取项目 2.idea导入项目 3.更改相关的配置 3.1更改maven仓库 3.2更改数据库的连接池 1.拉取项目 第一步&#xff1a;找到相关的项目地址 如图所示&#xff0c;在Gitee上找到相关的…

idea项目导入eclipse中步骤

1、打开eclipse&#xff0c;右键import 找到需要导入的项目 2、重新配置tomcat&#xff0c;已经配置好了建议移除后重新添加&#xff0c; window-preference 3、项目上右键-debug AS-发现没有 debug on server,这是没有转成web项目 项目右键-properties 配置好后会出…

idea与eclipse项目相互导入方式

目录 idea项目往eclipse中导入 idea项目导出到桌面 idea项目导入到工程中 idea项目迁徙到eclipse 第一种导入方式&#xff1a; 第二种导入方式&#xff1a; 第三种导入方式&#xff1a; eclipse项目往idea中导入 idea项目往eclipse中导入 idea项目导出到桌面 直…

idea中导入maven项目并运行

当我们从网上下载人家的maven项目该怎样导入并运行呢&#xff0c;请看如下步骤。 File->New->Project from Existing Source 选择maven项目下的pom.xml文件 File -> Project Structure 填写编译输出路径 6. 如果右边的某些项是红色的&#xff0c;点击右边的maven进行…

IDEA中导入Maven工程或项目

IDEA中导入Maven工程或项目 本文简单讲述了IDEA中导入Maven工程或项目。为了减轻读者压力笔者将 IDEA 相关应用技巧分解成了多篇文章置于主页 IDEA 专栏&#xff0c;若本文没有帮助到您&#xff0c;请去主页 IDEA 专栏检索吧 &#x1f60f;。 文章目录 IDEA中导入Maven工程或项…

使用IDEA导入SpringBoot项目

有时候会拿到别人现成的 springboot 项目&#xff0c;而不是从头自己做一个。 这个时候&#xff0c;就需要用导入的方式来 import 这么一个项目了。 1.IDEA 导入 SpringBoot 项目办法&#xff1a; 1&#xff09;菜单 -> File -> New -> Project from Existing Sourc…

Intellij IDEA 导入 eclipse web 项目详细操作

Intellij IDEA 导入 eclipse web 项目详细操作 第一步&#xff1a;准备工具我用的是 IntelliJ IDEA 2017.1(64) 这个版本的&#xff0c;在eclipse中找到我之前写skye_cnmy(非Maven),skye_client(Maven)的项目导入。 第二步&#xff1a;在Intellij IDEA File–>New–>Pr…

IDEA导入本地项目

1.文件-New—-Model from Existing Sources 2.选中需要导入的项目 3、选择maven文件选项&#xff0c;从外部模型导入模块。 Idea本地项目部署路径 IDEA不会把你的项目部署到你的Tomcat安装目录&#xff0c;它会在操作系统盘的用户目录下新建一个目录&#xff0c;这个目录一般是…

idea如何import_导入项目

今天"炸药"问我idea如何导入项目&#xff1a; 先close project 再到开始界面import&#xff0c;然后一直next就可以了。 具体操作和注意事项 特别注意&#xff1a; >>> 开始导入项目前&#xff0c;注意&#xff0c;删掉别人电脑的idea配置和class&#xf…

Idea导入项目详解

1.点击Import Project选择项目所在目录 2.Import Project选项区别: 1&#xff09;如果选择Create project from existing sources选项&#xff0c; 则你只能导入使用idea创建的项目源码 2&#xff09;如果选择Import project from external model&#xff0c;则你可以导入Eclip…