java中的棧
我們知道java中的引用變數都是儲存在棧中的。現在假使我們宣告一個String變數,String a;這裡我們就是在建立一個String引用,那麼a其實就代表的是一個地址。編譯器在做的時候就是為該引用變數在棧中分配一塊記憶體,並且將該記憶體清零。(偶一直想獲取該塊記憶體的地址,但是java不允許程式設計師管理記憶體所以不知道該怎麼做)。當將該引用初始化的時候,如a = new String("abc");那麼這塊棧記憶體中便寫入了該String物件在堆中的地址。但是由於基本資料型別是儲存在棧中的,所以對於基本資料型別的變數的引用,棧記憶體中儲存的便是棧地址。而且由於棧有一個很重要的特殊性,就是存在棧中的資料可以共享。假設我們同時定義:
複製內容到剪貼簿程式碼: 特別注意的是,這種字面值的引用與類物件的引用不同。假定兩個類物件的引用同時指向一個物件,如果一個物件引用變數修改了這個物件的內部狀態,那麼另一個物件引用變數也即刻反映出這個變化。相反,通過字面值的引用來修改其值,不會導致另一個指向此字面值的引用的值也跟著改變的情況。如上例,我們定義完a與b的值後,再令a=4;那麼,b不會等於4,還是等於3。在編譯器內部,遇到a=4;時,它就會重新搜尋棧中是否有4的字面值,如果沒有,重新開闢地址存放4的值;如果已經有了,則直接將a指向這個地址。因此a值的改變不會影響到b的值。
【注】資料型別包裝類的值不可修改。不僅僅是String類的值不可修改,所有的資料型別包裝類都不能更改其內部的值。 |
相關文章
- Java中堆和棧的區別Java
- Java中棧和堆講解Java
- Java棧與棧上分配Java
- 詳細介紹Java中的堆、棧和常量池Java
- JAVA的堆和棧(轉)Java
- Tarjan中棧的分析與SLT棧的實現
- java中堆與棧 java中資料佔用記憶體空間的大小Java記憶體
- Java之Stack --- 棧Java
- java堆和棧的區別Java
- 初識前端中的棧前端
- Flask中本地棧的使用Flask
- javascript中的棧結構JavaScript
- 值棧中root棧和context棧詳解Context
- java實現棧的簡單操作Java
- 關於Java棧與堆的思考Java
- java:模擬棧操作Java
- java 棧與佇列Java佇列
- java全棧工程師:從java後端到全棧,高階電商全棧系統大課Java全棧工程師後端
- java虛擬機器 jvm 出入java棧 棧空間記憶體分配Java虛擬機JVM記憶體
- STL中的棧的擴充套件 (轉)套件
- 獲取棧中任意位置的元素
- 吃人的那些 Java 名詞:物件、引用、堆、棧Java物件
- 原始碼閱讀之Java棧的實現原始碼Java
- JAVA棧操作 Stack——不可不知的操作Java
- Java棧資料結構的實現方式Java資料結構
- Java面試題:棧和佇列的實現Java面試題佇列
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- C++中堆和棧的完全解析C++
- 棧在表示式求值中的應用
- 堆和棧在程式中的比較
- java中a=a++值為什麼沒有改變?棧運算解析Java
- Java JVM——5.Java虛擬機器棧JavaJVM虛擬機
- Java版-資料結構-棧Java資料結構
- JAVA堆區棧區方法區Java
- 軟體測試是走Python棧還是Java棧好?PythonJava
- 成為Java全棧工程師的步驟Java全棧工程師
- optee userpace TA程式中的棧的設定
- 關於pwn題的棧平衡中ret的作用