導航:首頁 > 編程語言 > 字元串常量池java

字元串常量池java

發布時間:2022-06-05 11:57:54

java字元串常量池問題

程序運行時的任何數據都存放在程序內存中,程序結束後程序內存被回收,其中的任何數據都不再存在。

❷ java8字元串常量池在哪

首先你要知道jvm常量池也是對象池,它和在堆中的存儲沒有區別(底層存儲都是一樣的,只是對象之間的引用有差別)。那為什麼要有常量池呢?因為它可以節省時間和空間,當需要一個對象的時候,可以直接從常量池中獲取,而不需要重新創建,這樣也就節省了時間和空間(常量池判斷對象是否存在應該是equals方法)。
除了String外,Java的8種基本類型(Byte, Short, Integer, Long, Character, Boolean, Float, Double)除Float和Double以外,其它六種都實現了常量池。
樓主這么好學,我出個題目給樓主:
Integer i = 127;
Integer j = 127;
System.out.println(i == j);
提示:對象存在常量池

Integer m = 128;
Integer n = 128;
System.out.println(m == n);
提示:對象存在堆內存

❸ Java中的字元串常量池與Java中的堆和棧的區別

java常量池不在堆中也不在棧中,是獨立的內存空間管理。
1. 棧:存放基本類型的變數數據和對象的引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字元串常量對象存放在常量池中。)
2. 堆:存放所有new出來的對象。
3. 常量池:存放字元串常量和基本類型常量(public static final)。
對於字元串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的就存儲在堆中。對於equals相等的字元串,在常量池中永遠只有一份,在堆中有多份。

❹ java中的字元串到底是在方法區的常量池裡還是new出來的對象里

String str ="nihao";

當這段代碼編譯的時候,首先它會去堆里的方法區常量池裡去查找,如果有一個同樣的字元串「nihao」,存在,那麼它會把當前聲明的對象的地址指向那個字元串對象,調用的是String.itern()方法。如果沒有的話,它會開啟堆內存,分割一塊新的地址指向str對象。

String是不可變的(final的),不必擔心穩定性問題。

而當你新new一個String數組的時候,當你給String數組賦值的時候,它同樣遵循這個原理。

這樣做的好處:字元串多重利用,防止產生冗餘。

詳情參考jdk中String類的的itern方法:

public String intern()

❺ Java中,這些字元串什麼時候進入常量池的

Java中字元串對象創建有兩種形式,一種為字面量形式,如String str = "droid";,另一種就是使用new這種標準的構造對象的方法,如String str = new String("droid");,這兩種方式我們在代碼編寫時都經常使用,尤其是字面量的方式。然而這兩種實現其實存在著一些性能和內存佔用的差別。這一切都是源於JVM為了減少字元串對象的重復創建,其維護了一個特殊的內存,這段內存被成為字元串常量池或者字元串字面量池。

❻ java常量池是什麼

常量池(constant pool)指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。它包括了關於類、方法、介面等中的常量,也包括字元串常量。

❼ 求教 java 字元串緩沖區和常量池有什麼關聯、關系

java里的堆棧,常量池,用圖形來表示的話會好理解下,不過不會上傳圖片,就簡單的用文字描述下,希望能幫助你理解.
首先,java里new出來的對象都會存放在堆里.棧里可以存放對這些對象的指針的引用.
例如: A a=new A();
這里new出來的A對象會被存放在堆中,而 a呢.會被存放到棧里,並且保存了對A這個對象引用的地址.
棧的存放順序是後進先出,如果你接觸過數據結構的課程的話,這個並不難理解.
至於字元串池,是用來存放一些字元和棧和堆的關系,我們只需要這么理解,當我們創建一個字元串時,java會先在字元串池裡尋找有沒有你要創建的字元串.
例如: String a="你好";
先尋找字元串池裡有沒有 "你好" 這個字元串,如果存在,就不會在堆中再創建.
如果不存在,就會在堆中創建 "你好" 這個字元串 並在棧中生成 a保存對其的地址引用 然後還會將新創建的字元串"你好" 保存到字元串池中.

❽ Java String常量池

String s = new String("abc");

這兒事實上有兩個String對象;第一個String是"abc"對象,是對象本身,儲存在常量區,另一個是new為對象S申請的空間,而它是一個內存地址但是指向abc,你的理解是對的。

閱讀全文

與字元串常量池java相關的資料

熱點內容
生意不忙怎麼解壓 瀏覽:500
歡太健康app在哪裡下載 瀏覽:488
androidtools使用教程 瀏覽:971
十天突破雅思口語pdf劍9 瀏覽:295
李誕笑場pdf 瀏覽:265
自用紙巾做解壓筆 瀏覽:129
銀行流水解壓碼是多少 瀏覽:895
百度哪個app好用 瀏覽:316
115廣告聯盟源碼 瀏覽:494
聯通app簽到源碼 瀏覽:680
怎麼連接另一個伺服器的資料庫 瀏覽:742
貓盤洗白命令 瀏覽:844
168api源碼 瀏覽:967
不同地方的文件伺服器如何通信 瀏覽:599
自己電腦上搭建ftp伺服器地址 瀏覽:977
程序員的秋招秘籍 瀏覽:821
單片機國內外研究現狀 瀏覽:308
gta5如何進千人真實伺服器 瀏覽:996
電腦html壁紙源碼 瀏覽:726
c語言返回命令 瀏覽:933