JavaSE知識總結 ~個人筆記以及不斷思考~持續更新

目錄

字符串常量池

如果是創建對象還會==嗎?

Integer也是在字串常量池中復用?

字符串拼接

為什么String是不可變的?

String的不可變性是怎么做的?

外部代碼不能創建對象?

構造方法不是私有的嗎? 怎么new出來的?

那這兩個方法的各自作用呢?

為什么局部變量有初始值而成員變量沒有初始值呢?

靜態方法為什么不能調用非靜態成員?

Static 、final 、 static? final

泛型和泛型擦除


字符串常量池

字符串常量池在JDK7之前字符串常量池在運行時常量池(方法區),JDK7之后字符串常量池移動到堆中,字符串常量池的作用是在定義一個字符串的值時候會在字符串常量池中創建對象用于復用。

String a = "a";
String b = "a";
//a == b 是true

如果是創建對象還會==嗎?

答案是不會的。

String a = new String("a");
String b = "a";
// a == b 為false

因為new 一個字符串相當于在堆中和常量池都創建對象,所以是不相等的。

Integer也是在字串常量池中復用?

不是的,Integer是單獨的緩存機制,緩存范圍是-128~127之間。

Integer a = 127;
Integer b = 127;
//a==b 是true
Integer a = 129;
Integer b = 129;
//a==b 是false

字符串拼接

字符串拼接分成 變量拼接和常量拼接

String a = "a";
String b = "b";
String c = "a"+"b";//這樣是常量拼接,編譯器會把這個編譯成String c = "ab";
String d = a+b;//這個是變量拼接,相當于StringBuilder d = new StringBuilder().addpend("a").addend("b");但是不會放在字符串常量池中,字符串常量池中只有"a"和"b",然后堆中有 ab 和 StringBuilder對象

為什么String是不可變的?

首先是因為安全性,因為String如果是可變的在多線程的環境中不斷修改會造成未知的錯誤。其次是不可變性可以是String擁有緩存機制,再其次就是String的不可變性和StringBuilder、StringBuffer的可變性形成互補。

String的不可變性是怎么做的?

首先是因為String的底層是一個char[] 然后他是被final和 private 修飾的,這就導致了String一旦初始化就不能被修改或者重新賦值。其次是String內部的構造方法是私有的,這會導致外部代碼不能直接創建String對象。

外部代碼不能創建對象?

對的,String a = "a";是通過字符串常量池創建的,String a = new String("a");是通過構造方法創建的。

構造方法不是私有的嗎? 怎么new出來的?

new的這個不是通過那個private的構造方法創建的,其實在String內部是有公開的構造方法的,

public String(String original) {this.value = original.value;
}
//
private String(char value[]) {this.value = value;
}

那這兩個方法的各自作用呢?

首先公開的那個方法主要是接收字符串的值,然后在內部調用哪個私有的方法去創建對象,完成對象的初始化。

為什么局部變量有初始值而成員變量沒有初始值呢?

首先我們要清楚局部變量是在一個代碼塊里面,所以我們必須要給他賦值,因為,局部變量的生命周期是很短的,其實作用域范圍也很小,編譯器無法確定局部變量的初始值,所以必須要賦值。

成員變量的生命周期長、作用域很大,很可能在某一個方法某一個階段賦值,即使我們沒有給成員變量賦值系統也會自動給成員變量賦初值。

靜態方法為什么不能調用非靜態成員?

ps:類加載:加載 - 驗證 -??準備 - 解析 - 初始化

這個要和類加載有關了,靜態方法的初始化是在類加載的時候初始化的,而非靜態成員是在new 出來的他們的時候創建的,你用存在的去調用一個當前不存在的,這是不合理的!

Static 、final 、 static? final

static 表示讓這個方法和變量屬于這個類,而不是屬于實例對象

final 可以修飾類、方法、變量,表示類不能被繼承、方法不能被重寫、變量的值不能變

static final?表示變量屬于類本身且一旦初始化后不能被改變。

泛型和泛型擦除

泛型(Generics)是一種類型安全的機制,它允許你在定義類、接口和方法時使用類型參數。泛型的主要優點是類型安全和代碼的重用性。然而,Java的泛型實現有一個重要的特性叫做“泛型擦除”(Type Erasure),這是為了保持向后兼容性而設計的。

在編譯時,類型參數被替換為Object,類型信息在運行時被擦除。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82229.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用HTTPS進行傳輸加密

文章目錄 說明示例(公網上的公開web)安裝SSL證書Certbot 的 Webroot 模式 和 Standalone 模式的區別**Webroot 模式****Standalone 模式** 技術對比表Node.js 場景下的最佳實踐推薦方案:**Webroot 模式**Standalone 模式應急使用:…

驅動開發(2)|魯班貓rk3568簡單GPIO波形操控

上篇文章寫了如何下載內核源碼、編譯源碼的詳細步驟,以及一個簡單的官方demo編譯,今天分享一下如何根據板子的引腳寫自己控制GPIO進行高低電平反轉。 想要控制GPIO之前要學會看自己的引腳分布圖,我用的是魯班貓RK3568,引腳分布圖如…

ArcGIS Pro 3.4 二次開發 - 布局

環境:ArcGIS Pro SDK 3.4 + .NET 8 文章目錄 布局1 布局工程項1.1 引用布局工程項及其關聯的布局1.2 在新視圖中打開布局工程項1.3 激活已打開的布局視圖1.4 引用活動布局視圖1.5 將 pagx 導入工程1.6 移除布局工程項1.7 創建并打開一個新的基本布局1.8 使用修改后的CIM創建新…

OpenCV 圖像像素的算術操作

一、知識點 1、operator (1)、MatExpr operator (const Mat & a, const Mat & b); a、a和b的行數、列數、通道數得相同。 b、a和b的每個像素的每個通道值分別相加。 (2)、MatExpr operator (const Mat & a, const Scalar & s); a、若a…

音視頻中的復用器

🎬 什么是復用器(Muxer)? 復用器(muxer)是負責把音頻、視頻、字幕等多個媒體流打包(封裝)成一個單一的文件格式的組件。 💡 舉個形象的例子: 假設你有兩樣東…

數據庫安全性

一、計算機安全性概論 (一)核心概念 數據庫安全性:保護數據庫免受非法使用導致的數據泄露、更改或破壞,是衡量數據庫系統的關鍵指標之一,與計算機系統安全性相互關聯。計算機系統安全性:通過各類安全保護…

【Linux網絡編程】網絡層IP協議

目錄 IP協議的協議頭格式 網段劃分 特殊的IP地址 IP地址的數量限制 私有IP地址和公網IP地址 路由 IP協議的協議頭格式 4位版本號 :指定IP協議的版本,對于IPv4,版本號就是4。 4位首部長度:表名IP協議報頭的長度,單…

“候選對話鏈”(Candidate Dialogue Chain)概念

目錄 一、定義與形式 二、生成過程詳解 1. 語言模型生成(LLM-Based Generation) 2. 知識圖譜支持(KG-Augmented Generation) 3. 策略調控(Policy-Driven Planning) 三、候選對話鏈的屬性 四、候選對…

Unity中的JsonManager

1.具體代碼 先貼代碼 using LitJson; using System.IO; using UnityEngine;/// <summary> /// 序列化和反序列化Json時 使用的是哪種方案 有兩種 JsonUtility 不能直接序列化字典 ligJson可以序列化字典 /// </summary> public enum JsonType {JsonUtilit…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | Split Landing Page(拆分展示頁)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— SplitLandingPage 組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 在這篇文章中&#xff0c;我們將實現一個交互式的左右面板…

機器學習-ROC曲線?? 和 ??AUC指標

1. 什么是ROC曲線&#xff1f;?? ROC&#xff08;Receiver Operating Characteristic&#xff0c;受試者工作特征曲線&#xff09;是用來評估??分類模型性能??的一種方法&#xff0c;特別是針對??二分類問題??&#xff08;比如“患病”或“健康”&#xff09;。 ?…

Docker容器創建Redis主從集群

利用虛擬機中的三個Docker容器創建主從集群&#xff0c;容器信息&#xff1a; 容器名角色IP映射端口r1master192.168.150.1017001r2slave192.168.150.1017002r3slave192.168.150.1017003 啟動多個redis實例 新建一個docker-compose文件來構建主從集群&#xff1a; 文件內容&…

手寫ArrayList和LinkedList

項目倉庫&#xff1a;https://gitee.com/bossDuy/hand-tear-collection-series 基于b站up生生大佬&#xff1a;https://www.bilibili.com/video/BV1Kp5tzGEc5/?spm_id_from333.788.videopod.sections&vd_source4cda4baec795c32b16ddd661bb9ce865 LinkedList package com…

每日c/c++題 備戰藍橋杯(Cantor 表)

Cantor 表的探究與實現 在數學中&#xff0c;有理數的可枚舉性是一個令人驚嘆的結論。今天&#xff0c;就讓我們一起深入探討這個經典問題&#xff0c;并分享一段精心編寫的代碼&#xff0c;揭開這一數學奧秘的神秘面紗。 問題背景 在 19 世紀末&#xff0c;偉大的數學家康托…

解決idea與springboot版本問題

遇到以下問題&#xff1a; 1、springboot3.2.0與jdk1.8 提示這個包org.springframework.web.bind.annotation不存在&#xff0c;但是pom已經引入了spring-boot-starter-web 2、Error:Cannot determine path to tools.jar library for 17 (D:/jdk17) 3、Error:(3, 28) java: …

Notepad++找回自動暫存的文件

場景&#xff1a; 當你沒有保存就退出Notepad&#xff0c;下次進來Notepad會自動把你上次編輯的內容顯示出來&#xff0c;以便你繼續編輯。除非你手動關掉當前頁面&#xff0c;這樣Notepad就會刪除掉自動保存的內容。 問題&#xff1a; Notepad會將自動保存的文件地址,打開Note…

yolov12畢設前置知識準備 1

1 什么是目標檢測呢&#xff1f; 目標檢測&#xff08;Object Detection&#xff09;主要用于識別圖像或視頻中特定類型物體的位置&#xff0c;并標注其類別。 簡單來說&#xff0c;就是讓計算機像人類一樣 “看懂” 圖像內容&#xff0c;不僅能識別出物體&#xff08;如人、…

unix/linux source 命令,其內部結構機制

要理解 source (或 .) 命令的內部結構機制,我們需要戴上“操作系統”和“解釋器設計”的眼鏡,深入到 Shell 如何管理其狀態以及如何執行命令的層面。 雖然我們無法直接看到 Shell 內部的 C 代碼(除非我們去閱讀 Bash 或 Zsh 的源碼),但我們可以基于其行為和操作系統的原理…

計算機網絡學習20250528

地址解析協議ARP 實現IP地址和Mac地址的轉換 ARP工作原理&#xff1a; 每臺主機或路由器都有一個ARP表&#xff0c;表項&#xff1a;<IP地址&#xff0c;Mac地址&#xff0c;TTL>&#xff08;TTL一般為20分鐘&#xff09; 主機產生ARP查詢分組&#xff0c;包含源目的IP地…

【Rust】Rust獲取命令行參數以及IO操作

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…