JAVA小知识15:JAVA到底是值传递还是引用传递?

java中是值传递还是引用传递?

结论:值传递

一、值传递、引用传递

先看一个例子:

在这个例子中函数private static void updata(int i)中的 i 就叫形参

updata(a)中的 a 就叫做实参

值传递:若改变了i的值,但是a的值不变,就是值传递

引用传递:若改变了i的值,a的值变了,那就是引用传递

public static void main(String[] args) {
   int a=1;
   System.out.println("刚赋值的a:"+a);
   updata(a);
   System.out.println("调用函数之后的a:"+a);
}
private static void updata(int i){
    i++;
    System.out.println("函数里面的a:"+i);
}

其输出结果为:

我们可以看到,函数里面的操作并没有影响到main方法中的a的值,那就是值传递吗?

我们再看一个例子 :

public static void main(String[] args) {
    Student s1 = new Student("张三",16);
    updata(s1);
    System.out.println(s1);
}

private static void updata(Student student){
    student.setName("李四");
}

诶?我们看到,这个例子中函数的修改导致了main方法中s1对象的值发生了变化,这难道是引用传递吗?我们往下分析。

 二、传递机制

根据上面的第一个例子,我不做其他实验了,但是可以说的是JAVA中的八种基本数据类型肯定都是值传递,这一点是毋庸置疑的。那么JAVA中除了基本数据类型还有引用数据类型(类,接口,数组等等等一系列)。

基础知识我们都知道,在java内存中有栈和堆,我们创建一个基本数据类型的时候他是在栈中的,我们创建一个引用数据类型的时候他是在堆中的,

基本数据类型:我们传递的形参是一个副本
引用数据类型:我们的形参如果是一个引用数据类型,那么他传递的不是一个副本而是一个地址值:

  • 传递的是对象的引用的值,即内存地址。
  • 通过引用修改对象的属性会影响到原始对象。
public static void main(String[] args) {
    Student s1 = new Student("张三",16);
    updata(s1);
    System.out.println(s1.getName());
    System.out.println(s1);
}

private static void updata(Student student){
    System.out.println(student);
    student.setName("李四");
}

我们可以看到,地址是一模一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025年最值得期待数据安全保护系统

虽然具体到2025年的数据安全保护系统细节可能尚未完全公开,但从当前趋势和技术创新来看,可以预见一些关键特性和系统可能的发展方向。 1.防泄密软件安企神 持续的技术创新:安企神将继续采用并升级其先进的加密技术,确保数据在传输…

【Mybatis】关于Mybatis手写xml文件的常见问题

明天就是端午节啦 博主今天先提前祝大家端午节快乐呀&#xff01;&#xff01; 文章目录 前言一、尽量做到参数化查询二、关于param注解三、mybatis处理特殊字符1.转义字符2.<![CDATA[]]>&#xff08;CDATA 标记&#xff09; 四、结果映射1、映射好文件与接口 namespace2…

Docker 容器 mysql 配置主从

1、前提条件 集群的条件下 服务器 172.16.11.195 13316:3306 服务器 172.16.11.196 13317:3306 配置好主数据库和从数据 2、配置主从数据库 2.1使用portainer 来管理容器 建立数据库密码 新增配置文件 # mysql-master.cnf [mysqld] server_id110 log-binmysql-binrela…

android 开机动画执行流程

android深入了解开机动画 开机动画的种类 1&#xff1a;View绘制 2&#xff1a;逐帧动画&#xff1a;比较主流的方式&#xff0c;一般动画的文件打包成 bootanimation.zip 存储到 /system/media/ 下。一般.zip文件 > 5M 就会有明显的卡顿&#xff0c;所以一般开机动画只有…

【代码随想录】【算法训练营】【第36天】 [860]柠檬水找零 [406]根据身高重建队列 [452]用最少数量的箭引爆气球

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 36&#xff0c;周三&#xff0c;最难坚持的一天~ 题目详情 [860] 柠檬水找零 题目描述 860 柠檬水找零 解题思路 前提&#xff1a; 思路&#xff1a;维护5&#xff0c;10&#xff0c;20三种…

【教程】DGL单机多卡分布式GCN训练

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ PyTorch中的DDP会将模型复制到每个GPU中。 梯度同步默认使用Ring-AllReduce进行&#xff0c;重叠了通信和计算。 示例代码&#xff1a; 视频&#xff1…

【免费Web系列】大家好 ,今天是Web课程的第十九天点赞收藏关注,持续更新作品 !

1. Vue工程化 前面我们在介绍Vue的时候&#xff0c;我们讲到Vue是一款用于构建用户界面的渐进式JavaScript框架 。&#xff08;官方&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js&#xff09; 那在前面的课程中&#xff0c;我们已经学习了Vue的基本语法、表达式、指令…

MapperStruct拷贝数据的介绍和使用

1、前言 在java 编程中&#xff0c;对象直接拷贝是很常用的方法&#xff0c;最初我们常用spring提供的拷贝工具BeanUtils的copyProperties方法完成对象之间属性的拷贝。但是它有几个明显的如下缺点 1、属性类型不一致导致摸一个属性值拷贝失败 2、通一个字段使用基本类型和包…

Mybatis plus join 一对多对象语法

1. 实体类环境 题目 package co.yixiang.exam.entity;import co.yixiang.domain.BaseDomain; import co.yixiang.exam.config.CustomStringListDeserializer; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonCreator;…

使用Python爬取temu商品与评论信息

【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作&#xff01; 【&…

Pytorch--Convolution Layers

文章目录 1.nn.Conv1d2.torch.nn.Conv2d()3.torch.nn.ConvTranspose1d()3.torch.nn.ConvTranspose2d() 1.nn.Conv1d torch.nn.Conv1d() 是 PyTorch 中用于定义一维卷积层的类。一维卷积层常用于处理时间序列数据或具有一维结构的数据。 构造函数 torch.nn.Conv1d() 的语法如…

【运维自动化-配置平台】如何使用云资源同步功能(腾讯云为例)

云资源同步是通过apikey去单向同步云上的主机资源和云区域信息&#xff0c;目前支持腾讯云和亚马逊云。主要特性 1、蓝鲸配置平台周期性的单向只读同步云主机和vpc&#xff08;对应蓝鲸云区域&#xff09;信息&#xff0c;第一次全量&#xff0c;后面增量 2、默认同步到主机池…

kotlin 中的数字

以下均来自官方文档&#xff1a; 一、整数类型 1、kotlin中内置的整数类型&#xff0c;有四种不同大小的类型&#xff1a; 类型存储大小&#xff08;比特数&#xff09;最小值最大值Byte8-128127Short16-3276832767Int32-2,147,483,648 (-231)2,147,483,647 (231 - 1)Long64…

图片导入AutoCAD建立草图—CAD图像导入插件

插件介绍 CAD图像导入插件可将PNG&#xff0c;JPG等格式图片导入到AutoCAD软件内建立图像边缘的二维线条模型。插件可以提取图像黑色或白色区域的边界&#xff0c;并可绘制原状边界或平滑边界两种样式。 模型说明 边界提取&#xff0c;黑色或白色边界的提取根据原图类型选择…

c#调用c++dll方法

添加dll文件到debug目录&#xff0c;c#生成的exe的相同目录 就可以直接使用了&#xff0c;放在构造函数里面测试

排序的时间复杂度、空间复杂度和稳定性等的比较

时间复杂度和空间复杂度我们比较熟悉&#xff0c;重点来看一下稳定性。 稳定性是指假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持不变&#xff0c;即在原序列中&#xff0c;a[i] a[j] &…

Golang 百题(实战快速掌握语法)_1

整形转字符串类型 实验介绍 本实验将展示三种方法来实现整形类型转字符串类型。 知识点 strconvfmt Itoa 函数 代码实例 Go 语言中 strconv 包的 itoa 函数输入一个 int 类型&#xff0c;返回转换后的字符串。下面是一个例子。 package mainimport ("fmt"&qu…

跟TED演讲学英文:Toward a new understanding of mental illness by Thomas Insel

Toward a new understanding of mental illness Link: https://www.ted.com/talks/thomas_insel_toward_a_new_understanding_of_mental_illness Speaker: Thomas Insel Date: January 2013 文章目录 Toward a new understanding of mental illnessIntroductionVocabularySum…

【C语言】联合(共用体)

目录 一、什么是联合体 二、联合类型的声明 三、联合变量的创建 四、联合的特点 五、联合体大小的计算 六、联合的应用&#xff08;判断大小端&#xff09; 七、联合体的优缺点 7.1 优点 7.2 缺点 一、什么是联合体 联合也是一种特殊的自定义类型。由多个不同类型的数…

测长仪的发展历程!

测长仪的发展历程可以大致分为以下几个阶段&#xff1a; 早期发展&#xff1a; 最早的测量工具主要是一些机械式测量工具&#xff0c;如角尺、卡钳等。 16世纪&#xff0c;在火炮制造中已开始使用光滑量规。 1772年和1805年&#xff0c;英国的J.瓦特和H.莫兹利等先后制造出利用…