Java 中的数据类型误导点!!!

在 Java 中,数据类型分为两大类:基本类型(Primitive Types) 和 引用类型(Reference Types)。它们的存储方式和行为完全不同。

1. 基本类型

Java 有 8 种基本数据类型,它们直接存储值(而不是引用),存放在 栈内存(Stack) 中:
✅ 直接存储值,而不是引用。
✅ 赋值时是值拷贝修改一个变量不会影响另一个!!!!!!

int a = 10;
int b = a;  // b 是 a 的副本
b = 20;     // 修改 b 不会影响 a
System.out.println(a); // 10
System.out.println(b); // 20

2.引用类型

除了基本类型,其他所有类型都是引用类型,包括:
1.类(String、ArrayList、自定义类等)
2.接口
3.数组(int[]、String[] 等)
4.枚举(enum)

✅ 变量存储的是对象的引用(内存地址),而不是对象本身。
✅ 对象本身存储在堆内存(Heap),变量只是指向它。
✅ 赋值(=)时是引用拷贝,修改一个变量的值会影响另一个(因为它们指向同一个对象)

List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);List<Integer> list2 = list1;  // list2 和 list1 指向堆中同一个对象
list1.clear();                // 修改 list1 会影响 list2System.out.println(list1); // []
System.out.println(list2); // []

3.引用类型的应用

因为Java的List是引用类型,所以可以直接取出子List直接删除对应值,母mBeanList 中的值也是同步对应值也会删除!

private List<List<Bean>> mBeanList = new ArrayList<>();;
List<Bean> beans = mBeanList.get(Position);
beans.remove(tean);这时候mBeanList中也没有tean!!!!!!

4.浅拷贝和深拷贝

浅拷贝(Shallow Copy)只是=进行赋值!!!!!!

只复制对象本身
新对象和原对象共享内部引用(如 List、Array、自定义类等)。

class Person {String name;List<String> hobbies;public Person(String name, List<String> hobbies) {this.name = name;this.hobbies = hobbies;}
}// 原始对象
List<String> hobbies = new ArrayList<>(Arrays.asList("Reading", "Gaming"));
Person person1 = new Person("Alice", hobbies);// 浅拷贝(直接赋值)
Person person2 = person1;
person2.name = "Bob";          // 修改基本类型(不影响 person1)
person2.hobbies.add("Music");  // 修改引用类型(会影响 person1)System.out.println(person1.hobbies); // [Reading, Gaming, Music](被修改)
System.out.println(person2.hobbies); // [Reading, Gaming, Music]

关键点:
person2 = person1 是浅拷贝,person2 和 person1 共享 hobbies。 修改 person2.hobbies 会影响 person1.hobbies。

深拷贝(Deep Copy)就是创建了个新对象!!!!!!!

完全复制对象及其内部的所有引用类型数据,生成一个 完全独立的新对象!!!
新对象和原对象不共享任何引用。

class Person implements Cloneable {String name;List<String> hobbies;public Person(String name, List<String> hobbies) {this.name = name;this.hobbies = new ArrayList<>(hobbies); // 深拷贝 hobbies}// 深拷贝方法@Overridepublic Person clone() {return new Person(this.name, new ArrayList<>(this.hobbies));}
}// 原始对象
List<String> hobbies = new ArrayList<>(Arrays.asList("Reading", "Gaming"));
Person person1 = new Person("Alice", hobbies);// 深拷贝
Person person2 = person1.clone();
person2.name = "Bob";          // 修改基本类型(不影响 person1)
person2.hobbies.add("Music");  // 修改引用类型(不影响 person1)System.out.println(person1.hobbies); // [Reading, Gaming](未被修改)
System.out.println(person2.hobbies); // [Reading, Gaming, Music]

关键点:
clone() 方法创建了一个新对象,并 深拷贝了 hobbies。修改 person2.hobbies 不会影响 person1.hobbies。

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

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

相关文章

二次封装 el-dialog 组件:打造更灵活的对话框解决方案

文章目录 引言为什么需要二次封装&#xff1f;封装思路代码实现1. 基础封装组件 (Dialog.vue)2. Vue中引入使用示例 封装后的优势进阶优化建议 总结 引言 在 Vue 项目中&#xff0c;Element UI 的 el-dialog 是一个非常实用的对话框组件。但在实际开发中&#xff0c;我们经常会…

框架篇八股(自用)

框架篇 Spring框架中的bean不是线程安全的 Scope&#xff08;&#xff09; singleton单例 prototype多例 一个类中有可修改的成员变量需要考虑线程安全 bean没有可变状态&#xff08;service类&#xff0c;DAO类&#xff09; 某种程度单例bean是线程安全的 AOP面向切面编程…

Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)

1.protobuf简介 protobuf 即 Protocol Buffers&#xff0c;是一种轻便高效的结构化数据存储格式&#xff0c;与语言、平台无关&#xff0c;可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的&#xff0c;占用空…

rust-candle学习笔记11-实现一个简单的自注意力

参考&#xff1a;about-pytorch 定义ScaledDotProductAttention结构体&#xff1a; use candle_core::{Result, Device, Tensor}; use candle_nn::{Linear, Module, linear_no_bias, VarMap, VarBuilder, ops};struct ScaledDotProductAttention {wq: Linear,wk: Linear,wv: …

spark MySQL数据库配置

Spark 连接 MySQL 数据库的配置 要让 Spark 与 MySQL 数据库实现连接&#xff0c;需要进行以下配置步骤。下面为你提供详细的操作指南和示例代码&#xff1a; 1. 添加 MySQL JDBC 驱动依赖 你得把 MySQL 的 JDBC 驱动添加到 Spark 的类路径中。可以通过以下两种方式来完成&a…

web 自动化之 KDT 关键字驱动详解

一、什么是关键字驱动&#xff1f; 1、什么是关键字驱动&#xff1f;&#xff08;以关键字函数驱动测试&#xff09; 关键字驱动又叫动作字驱动&#xff0c;把项目业务封装成关键字函数&#xff0c;再基于关键字函数实现自动化测试 2、关键字驱动测试原理 关键字驱动测试是一…

Java使用POI+反射灵活的控制字段导出Excel

前端传入哪些字段&#xff0c;后端就导出哪些到Excel表格中&#xff0c;具体代码实现如下 controller /*** 用户导出* param dto*/PostMapping("/exportUser")public void exportCharterOrder(RequestBody UserExportDTO dto){userService.exportUser(dto);} serv…

Qt/C++面试【速通笔记八】—Qt的事件处理机制

在Qt中&#xff0c;事件处理机制是应用程序与用户或系统交互的核心。通过事件处理&#xff0c;Qt能够响应用户的输入、窗口的变化、定时器的触发等各种情况。 1. 事件循环&#xff08;Event Loop&#xff09; 在Qt应用程序中&#xff0c;事件循环是事件处理机制的基础。事件循…

TTL (Time-To-Live) 解析

文章目录 TTL (Time-To-Live) 解析&#xff1a;网络与Java中的应用一、TTL的定义二、TTL在网络中的应用1. **路由和数据包的生命周期**2. **DNS中的TTL**3. **防止环路** 三、TTL在Java中的应用1. **缓存管理**2. **Java中的ThreadLocal**3. **网络通信中的TTL** 四、TTL的注意…

HDFS的客户端操作(2)文件上传

我们向/maven下上传一个文件。 要用到的api是put (或者copyFormLocalFile&#xff09;。核心代码如下。 public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration new Configurati…

光谱相机的光电信号转换

光谱相机的光电信号转换是将分光后的光学信息转化为可处理的数字信号的核心环节&#xff0c;具体分为以下关键步骤&#xff1a; 一、分光后光信号接收与光电转换 ‌分光元件作用‌ 光栅/棱镜/滤光片等分光元件将入射光分解为不同波长单色光&#xff0c;投射至探测器阵列表面…

网络协议分析 实验二 IP分片与IPv6

文章目录 索引及重要内容实验2 IP 高级实验实验2.1 IPv4协议分片实验实验2.2 IPV6协议实验2.3 ARP初级 索引及重要内容 实验2 IP 高级实验 实验2.1 IPv4协议分片实验 icmp的不可达报文 实验2.2 IPV6协议 实验2.3 ARP初级 arp –a 查看ARP缓存表内容 arp –s IP地址(格式&…

20、map和set、unordered_map、un_ordered_set的复现

一、map 1、了解 map的使用和常考面试题等等&#xff0c;看这篇文章 map的key是有序的 &#xff0c;值不可重复 。插入使用 insert的效率更高&#xff0c;而在"更新map的键值对时&#xff0c;使用 [ ]运算符效率更高 。" 注意 map 的lower和upper那2个函数&#x…

基于 Amazon Bedrock 和 Amazon Connect 打造智能客服自助服务 – 设计篇

随着 GenAI 技术不断的发展和演进&#xff0c;人工智能技术广泛地被应用在呼叫中心服务领域&#xff0c;主要包括虚拟坐席&#xff08;即自助服务&#xff09;、坐席助手和呼叫中心运营的数据洞察和智能分析。本博客主要针对自助服务应用场景的实现。 1. 传统自助服务系统瓶颈 …

java高效实现爬虫

一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对JavaScript渲染、Ajax加载等复杂场景。而集成代理服务则能够解决IP限制、地域访问限制等问题。本文将详细介绍如何利用JavaSelenium快代理实…

【计算机视觉】OpenCV实战项目:基于OpenCV的车牌识别系统深度解析

基于OpenCV的车牌识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理1) 自适应光照补偿2) 边缘增强 2.2 车牌定位1) 颜色空间筛选2) 形态学操作3) 轮廓分析 2.3 字符分割1) 投影分析2) 连通域筛选 2.4 字符识别 3. 实战部署指南3.1 环境配置3.2 项目代码解析 4.…

Python核心数据类型全解析:字符串、列表、元组、字典与集合

导读&#xff1a; Python 是一门功能强大且灵活的编程语言&#xff0c;而其核心数据类型是构建高效程序的基础。本文深入剖析了 Python 的五大核心数据类型——字符串、列表、元组、字典和集合&#xff0c;结合实际应用场景与最佳实践&#xff0c;帮助读者全面掌握这些数据类型…

GPT-4.1和GPT-4.1-mini系列模型支持微调功能,助力企业级智能应用深度契合业务需求

微软继不久前发布GPT-4.1系列模型后&#xff0c;Azure OpenAI服务&#xff08;国际版&#xff09;现已正式开放对GPT-4.1和GPT-4.1-mini的微调功能&#xff0c;并通过Azure AI Foundry&#xff08;国际版&#xff09;提供完整的部署和管理解决方案。这一重大升级标志着企业级AI…

构造+简单树状

昨日的牛客周赛算是比较简单的&#xff0c;其中最后一道构造题目属实眼前一亮。 倒数第二个题目也是一个很好的模拟题目&#xff08;考验对二叉树的理解和代码的细节&#xff09; 给定每一层的节点个数&#xff0c;自己拟定一个父亲节点&#xff0c;构造一个满足条件的二叉树。…

apache2的默认html修改

使用127.0.0.1的时候&#xff0c;默认打开的是index.html&#xff0c;可以通过配置文件修改成我们想要的html vi /etc/apache2/mods-enabled/dir.conf <IfModule mod_dir.c>DirectoryIndex WS.html index.html index.cgi index.pl index.php index.xhtml index.htm <…