关于java在成员/全局变量上不同类型赋值遇到的问题(值传递)

news2024/11/18 15:47:24

一个疑惑

  • 文件简介
  • 回答
  • 参考文献

文件简介

class ss{
    static class Student{
        int id;
        String name;
/*
        public Student(int id, String name) {
            this.id = id;
            this.name = name;
        }*/

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }

    public static void main(String[] args) {
        int a = 1;
        method1(a);
        System.out.println(a);
        System.out.println("------");

        Integer aa = 1;
        method2(aa);
        System.out.println(aa);
        System.out.println("------");

        String aaa = "1";
        method3(aaa);
        System.out.println(aaa);

        Student student = new Student();
        method4(student);
        System.out.println(student);


    }
    public static void method4(Student input){
        input.setId(3);
    }


    public static void method1(int input){
        input = 2;
    }

    public static void method2(int input){
        input = 2;
    }

    public static void method3(String input){
        input = "2";
    }
}

结果是什么?

在这里插入图片描述
有返回值的设值才会让String、int改变,而对javabean的直接赋值不需要返回直接变化掉

这是什么导致的?存储位置吗?

回答

值的传递是需要确定 传输的是 存储位置还是一个复制的成员变量

  • 对于javaBeab对象,传递的是存储位置
  • 对于String、int类型,传递的是复制的成员变量

在java中只有值传递,没有引用传递,即使是包装类型,传递了引用,但是依然是通过创建副本进行传递的!

我们创建变量和对象,都是在栈中创建了对象引用,引用指向了堆中的具体值

在上面代码中,String、Integer本来就是finial类型,其引用指向的是一个常量池,如果变化,只是在栈中复制了一个引用,并指向了新的位置

在这里插入图片描述

一旦method方法结束,copy_a变量作为一个局部变量就将被清理;
copy_a进行了如下操作:

  1. 在栈中复制引用;
  2. 在堆中复制新的值使copy_a = 1;
  3. 进入方法体内,copy_a修改为2;

而对于Student对象,

在这里插入图片描述
copy_student进行了如下操作:

  1. 在栈中复制引用开辟空间及地址位置;
  2. 在堆中指向对应地址;
  3. 进入方法体内,id修改为2;

参考文献

  • 链接: java的值传递
  • 感谢项目组资深开发讲解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字人入门文章速览

语音驱动三维人脸方法 OPPO 数字人语音驱动面部技术实践 【万字长文】虚拟人漫谈 Blendshape学习笔记 人脸重建速览,从3DMM到表情驱动动画 功能强大的python包(四):OpenCV 从Blendshapes到Animoji 3D人脸重建算法汇总 一、3D人脸重…

windows 10 安装k8s环境 Kubernetes

主要命令有 1. iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex 2. choco install minikube 3. minikube start 4. minikube dashboard 使用管理员运行 PowerShell 执行下面这条命令 iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex choc…

开源赋能 普惠未来|铜锁/Tongsuo诚邀您参与2023开放原子全球开源峰会

铜锁/Tongsuo是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算、区块链等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中…

Linux:web基础与HTTP协议

Linux:web基础与HTTP协议 一、域名概述1.1 域名的概念1.2 域名空间结构1.3 域名注册 二、网页的概念2.1 网页2.2 网站2.3 主页2.4 网页2 三、HTML概述3.1 HTML概述3.2 HTML文档结构3.3 HTML 基本标签 四、web概述4.1 web概述4.2 Web1.0 vs Web2.04.3 静态网页4.3.1 …

【挑战自己】软件测试的7个级别,做到3级已经超越80%测试人

有人说:软件测试就是最low的点点点工作。 有人说:测试工作职位薪水到一定程度只能原地踏步无法提升 也有人说:测试行业相对于开发来说技术性很低,容易被取代。 这其实是对测试行业最大的误解。测试可深可浅,可窄可广…

QDir拼接路径解决各种斜杠问题

一般在项目中经常需要组合路径,与其他程序进行相互调用传递消息通信。 经常可能因为多加斜杠、少加斜杠等问题导致很多问题。 为了解决这些问题,我们可以使用QDir来完成路径的拼接,不直接拼接字符串。 QDir的静态方法QDir::cleanPath() 是为了规范化路径名的,在使用QDir组…

Unity第三方分享(微信)插件ShareSDK使用简记

Unity第三方分享(微信)插件ShareSDK使用简记 微信分享遇到的问题记录 链接官方链接参考链接 微信分享 官方文档:MobTech集成文档-MobTech 下载地址:GitHub - MobClub/New-Unity-For-ShareSDK: New sample of ShareSDK for Unity,…

ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络安全新防御

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时 网络安全新防御1. 针对人工智能2. 针对5G和物联网3. 针对云安全4.针对社交工程5. 针对加密技术6. 针对多层次的安全控制 总结 ChatGPT(全名:Chat Generative Pre-traine…

去除氟离子的最好办法,矿井水现场氟离子超标RO浓水除氟

一、产品介绍 氟化物选择吸附树脂 Tulsimer CH-87 是一款去除水溶液中氟离子的专用的凝胶型选择性离子交换树脂。它是具有氟化物选择性官能团的交联聚苯乙烯共聚物架构的树脂。 去除氟离子的能力可以达到 1ppm 以下的水平。中性至碱性的PH范围内有较好的工作效率,并…

保姆级别!!!--全网绝对教你会!!教你如何使用MQTTFX连接阿里云平台中的设备----下期告诉你如何创建!

本期需要下载的软件 MQttfx安装包,本人打包的-嵌入式文档类资源-CSDN文库 目录 第一步:建造阿里云设备 这个可以先忽略建造步骤,下期将提供步骤。 第二步:下载mqttfx软件 第三步:填写密钥信息进行连接 查看三元…

如何显示物品词缀?

UE5 插件开发指南 前言0 什么是物品词缀?1 如何动态显示物品词缀?前言 读到这里读者应该已经知道如何解析这个题目了,拆分为如下问题: (1)什么是物品词缀? (2)如何动态显示? 0 什么是物品词缀? 首先要知道什么是物品词缀,如下图所示,物品词缀就是用来描述物品属性的…

助力服务智能医疗检测,基于yolov5开发构建结直肠息肉检测系统,实践训练n/s/m不同量级模型,对比性能结果

将人工智能技术应用于众多的生活真实场景中是一件很有前景的事情,在我前面的博文中已经有不少的相关的开发实践,应用于医学领域也是一个非常重要的细分分支领域,在前面的博文中也有一些实践,感兴趣的话可以自行移步阅读。 《服务…

无需公网IP,快速远程登录家里的威联通NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 转载自cpolar内网穿透的文章:无需公网IP,在外远程访问威联通QNAP|N…

『 MySQL篇 』:MySQL 事务特性

目录 一 . 什么是事务? 二. 事务的操作 ​三. 事务的四大特性 四 . 并发事务可能产生的问题 五 . 数据库的隔离级别 一 . 什么是事务? 从概念上来讲,事务是一个有限的数据库操作序列构成,这些操作要么全部执行&#xff0c…

使用 RLHF 训练 LLaMA 的实践指南:StackLLaMA

由于LLaMA没有使用RLHF,后来有一个初创公司 Nebuly AI使用LangChain agent生成的数据集对LLaMA模型使用了RLHF进行学习,得到了ChatLLaMA模型,详情请参考:Meta开源的LLaMA性能真如论文所述吗?如果增加RLHF,效…

Xcode14.3升级完项目无法运行

升级到14.3在真机上运行报错如下: /XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a 解决方法: 在Podfile中的最后一个end出添加下面代码 post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| targ…

chatgpt赋能Python-python_nums

Python NumPy:大数据分析的神奇武器 Python NumPy是一种用于处理大型数据集的Python库。NumPy提供了一个矩阵数据结构,用于在Python中进行数学运算和数据分析。在本文中,我们将介绍NumPy的基本功能,以及它如何在数据科学领域中提…

KDZK-F励磁综合特性测试仪

一、产品概述 KDZK-F励磁综合特性测试仪是判断发电机转子绕组有无匝间短路的专用仪器,可以自动、手动(单向或双向)测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标,操作更方便。 可选择快速的自…

MySQL数据库最常见的6种故障的排除方法

MySQL数据库最常见的6中故障的排除方法 1.MySQL无法启动 2.MySQL连接不上 3.MySQL打开文件失败 4.MySQL挂起(hung) 5.MySQL崩溃(crash) 6.忘记用户密码 1.MySQL无法启动 1.无法访问系统资源 2.参数设置错误 无法访问系统…

【国产虚拟仪器】基于Zynq的雷达10Gbps高速PCIE数据采集卡方案(三)软件设计

4.1 引言 本章基于第二章的分析结论,进行系统软件设计。软件设计包括逻辑设计、嵌入 式软件设计和上位机软件设计。在逻辑设计中,对 ADC 模块、 Aurora 模块、 DDR3 SDRAM 模块和 PCIE 模块进行分析和设计,在 Vivado 软件提供的 …