1. 程式人生 > >final、static、static final修飾引用型別時的區別

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

相關推薦

finalstaticstatic 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

staticfinalabstract修飾

3.3 div 報錯 編寫代碼 pen 抽象 private 1.3 編譯 一、static修飾符   1.1、static變量 在類中,使用static修飾的成員變量,就是靜態變量,反之為非靜態變量。 靜態變量和非靜態變量的區別

Java面向對象(staticfinal匿名對象內部類修飾代碼塊)

固定 介紹 常量 屬於 權限 功能 復雜 art 代碼區 面向對象 今日內容介紹 u final u static u 匿名對象 u 內部類 u 包的聲明與訪問 u 四種訪問修飾符 u 代碼塊 第1章 final關鍵字 1.1 final的概念 繼承的出現提高了代碼的復用性

【Java】基礎:常見修飾符(權限修飾符以及abstractstaticfinal等)與變量的描述

線程 cte string 數據 執行 style 權限 實例 類名 1. 修飾符 public、protected、private、default abstract、static、final、 abstract:抽象類、抽象方法 static:靜態變量、

13_Java面向物件_第13天(staticfinal匿名物件內部類修飾程式碼塊)_講義

今日內容介紹 1、final 關鍵字 2、static 關鍵字 3、匿名物件 4、內部類 5、包的宣告與訪問 6、訪問修飾符 7、程式碼塊 第1章 final關鍵字 1.1 final的概念 繼承的出現提高了程式碼的複用性,並方便開發。但隨之也有問題,有些類在描述完之後,不想被繼承,或者有些