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
英文地址,請注明出處:http://en.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 <…