final、static、static final修飾引用型別時的區別
總結:
final修飾的引用型別:是在堆記憶體new出來的;(如物件)可以被賦值一次,引用地址不可變,但物件裡面的內容(如屬性值)可以變。
static修飾的引用型別:是在載入類的時候,load到方法區的;是這個類的例項共有的類方法or屬性;引用的地址可以變,裡面具體的內容也可以變
static final修飾的引用型別:是在載入類的時候,load到方法區的(同static);可以被賦值一次,引用地址不可變,但物件裡面的內容(如屬性值)可以變(同final);
public class test2 { // final修飾基本型別的變數 public static StringBuffer a = new StringBuffer("StringBuffer"); // final修飾引用型別的變數 public static final StringBuffer b = new StringBuffer("StringBuffer"); // public final StringBuffer c = new StringBuffer("StringBuffer"); public static void main(String[] args) { // 編譯報錯,引用不能變 test2 t = new test2(); a = new StringBuffer("hehe"); // b = new StringBuffer("hehe");//b和c都是final的,無法被重新賦值 // t.c = new StringBuffer("hehe"); // 引用變數所指向的物件中的內容還是可以改變的 a.append("xxx"); System.out.println(a);//得到hehexxx b.append("lalal"); System.out.println(b);//得到StringBufferlalal } public static int method1(final int i) { // i = i + 1;// 編譯報錯,因為final修飾的是基本型別的變數 return i; } // 有人在定義方法的引數(引用變數)時,可能想採用如下的形式來阻止方法內部修改傳進來的引數物件, // 實際上,這是辦不到的,在該方法內部仍然可以增加如下程式碼來修改引數物件 public static void method2(final StringBuffer buffer) { buffer.append("buffer");// 編譯通過,因為final修飾的是引用型別的變數 } }
參考:
1、http://blog.csdn.net/tengdazhang770960436/article/details/25156743
2、http://blog.csdn.net/u012110719/article/details/46334413
相關推薦
final、static、static final修飾引用型別時的區別
總結: final修飾的引用型別:是在堆記憶體new出來的;(如物件)可以被賦值一次,引用地址不可變,但物件裡面的內容(如屬性值)可以變。 static修飾的引用型別:是在載入類的時候,load到方法區的;是這個類的例項共有的類方法or屬性;引用的地址可以變,裡面具體的內容
java中,方法引數是基本型別和引用型別的區別
方法引數是基本型別時,傳遞的是值。 方法引數是引用型別時,傳遞的是記憶體地址值 當引數是基本型別時,在呼叫方法時將值傳遞到方法中,執行方法,執行結束方法退出,對原本main中定義的變數沒有任何操作(方法中沒有return)。即:此時只跟棧有關係,方法執行完之後(方法中沒有return),會彈棧。
js中值型別和引用型別的區別(無舉例)
js中的變數型別有哪些? (1)值型別:字串string、數值number、布林值boolean、undefined (2)引用型別:物件object、陣列array、函式function 值型別和引用型別的區別 (1)值型別: 1⃣️佔用空間固定,儲存在棧中(當一個方法
學習Java的引用型別時的一點心得二之引用變數
上篇我寫到類的靜態成員屬性(域、變數)是所有此類物件的共同特性,為此類所有的物件所共享;物件的成員屬性為每個用此類創建出的物件所獨有,不為其它物件所有。 那在這裡,我們多次提到一個詞——物件。首先在java中,物件是什麼呢?想在我所讀過的所有的書中都說過這樣一句話:一切皆物件。 我在這裡真有
學習Java的引用型別時的一點心得
一、對Java中的變數的心得 在一個java類中,首先根據變數修飾符的不同,可以把變數分為兩類——類變數(靜態變數)和例項變數(物件變數);其次是可以根據變數被宣告時所在位置的不同也可分為兩類——即成員變數和區域性變數。 那這個類中的變數我們都知道,這個東西有什麼好說的呢? 在這裡,我就
值型別與引用型別的區別
值型別 struct結構,enum列舉 結構包括: 簡單結構(int,char,float,double,bool.....),使用者自定義的結構體, 引用型別 類,陣列,介面,代理 類包括 object,string,使用者自定義類 區別 (1)值型別存在棧上
C#中值型別與引用型別的區別
值型別是直接儲存一個數值,而引用型別是儲存對值的引用,這兩種型別分別儲存在不用的記憶體區域。而從記憶體上看,值型別是在棧中的操作,而引用型別是在堆中的操作。值型別是具體的那個數值所佔用的空間大小,而引用
Swift 值型別 和 引用型別的區別
本文參考 : The Swift Programming Language 值型別 值型別包括結構體, 列舉, 所有的基本型別(整數, 浮點數, 布林值, 字串, 陣列, 字典, 元組), 都是值型別 值型別被賦予給一個變數, 常數或者本身
簡述值型別和引用型別的區別
區別: 1:值型別的資料儲存在記憶體棧中,引用型別的資料儲存在堆中,引用型別的記憶體單元中儲存的是堆中存放的地址。 2:值型別的存取速度快,引用型別的存取速度慢。 3:值型別表示為實際的資料,引用型別表示指向儲存在記憶體堆中的資料的指標和引用。 4:棧記憶體是自動釋放的,堆
值型別和引用型別的區別?寫出C#的樣例程式碼。
值型別是在記憶體中儲存,引用型別是在記憶體中儲存一副本.你在記憶體中可以有多個某種引用物件..但是值型別始終只有一個. 最常見的值型別就是static,struct; 例如: static int a
值型別和引用型別的區別 .
在開始探討.NET Framework的底層型別系統時,常常會聽到一些相互矛盾的說法。一方面,“所有的型別都繼承於Object類”,另一方面“在值型別和引用型別之間轉換時要特別小心”。搞清楚這些說法的關鍵在於,要記住——每種型別,無論是內建的結構,如整型或字串型,還是定製類,如MyEmployee,都繼承
golang 值型別與引用型別的區別
1最本質的區別 值型別:記憶體中變數儲存的是具體的值 比如: var num int num存放的是具體的int值 但是變數在記憶體中的地址可以通過 &num 來獲取 引用型別:變數直接存放的就是一個地址值,這個地址值指向的空間存的才是值。 例如 va
在JavaScript中值型別和引用型別的區別
在JavaScript中值型別和引用型別的區別 一、儲存方式不一樣 l基本資料型別 變數儲存的是簡單的資料段,儲存的是具體的值,是輕量級的資料儲存方式 l引用型別 引用型別的值,可以由多個值構成的物件,引用型別的變數儲存的是物件引用地址。引用型別是重量的資料儲存方式,分配在堆記憶體,頻繁建立物件有損效能。
值型別和引用型別的區別
本文主要是討論棧和堆的含義,也就是討論C#的兩種類據型別:值型別和引用型別; 雖然我們在.net中的框架類庫中,大多是引用型別,但是我們程式設計師用得最多的還是值型別。 引用型別如:string,Object,class等總是在從託管堆上分配的,C#中new操
C++中函式返回值的引用型別與非引用型別的區別
返回值為引用型別的函式某些情況下可作為表示式的左值,而非引用的則一般不可以。 函式返回值若為引用型別,當返回的是函式的引用形參時,則是對函式外的變數的引用,函式可以作為表示式的左值(被賦予新值)。 而當函式返回的是非引用型別時,返回的值是函式內隱式生成的
裝箱和拆箱-值型別和引用型別的區別
一、概述 在C#中,資料根據變數的型別以兩種方式中的一種儲存在一個變數中。變數的型別分為兩種:引用型別和值型別,這也是CLR支援的兩種型別。 二、定義 1.引用型別: 分配在堆上的型別稱為引用型別。 解析:一個可以稱為”類“的型別都是引用型別。 引用型別總是從託管堆上分配的,常用的語法就是N
static、final、abstract修飾符
3.3 div 報錯 編寫代碼 pen 抽象 private 1.3 編譯 一、static修飾符 1.1、static變量 在類中,使用static修飾的成員變量,就是靜態變量,反之為非靜態變量。 靜態變量和非靜態變量的區別
Java面向對象(static、final、匿名對象、內部類、包、修飾符、代碼塊)
固定 介紹 常量 屬於 權限 功能 復雜 art 代碼區 面向對象 今日內容介紹 u final u static u 匿名對象 u 內部類 u 包的聲明與訪問 u 四種訪問修飾符 u 代碼塊 第1章 final關鍵字 1.1 final的概念 繼承的出現提高了代碼的復用性
【Java】基礎:常見修飾符(權限修飾符以及abstract、static、final等)與變量的描述
線程 cte string 數據 執行 style 權限 實例 類名 1. 修飾符 public、protected、private、default abstract、static、final、 abstract:抽象類、抽象方法 static:靜態變量、
13_Java面向物件_第13天(static、final、匿名物件、內部類、包、修飾符、程式碼塊)_講義
今日內容介紹 1、final 關鍵字 2、static 關鍵字 3、匿名物件 4、內部類 5、包的宣告與訪問 6、訪問修飾符 7、程式碼塊 第1章 final關鍵字 1.1 final的概念 繼承的出現提高了程式碼的複用性,並方便開發。但隨之也有問題,有些類在描述完之後,不想被繼承,或者有些