本文目錄一覽:
- 1、java中引用數據類型有哪些?
- 2、JAVA中值類型和引用類型的區別
- 3、Java里什麼是引用類型?
- 4、java中的引用數據類型是怎樣的?
- 5、java中的引用數據類型是什麼意思?
- 6、北大青鳥設計培訓:java編程引用類型分析?
java中引用數據類型有哪些?
Java中有倆種數據類型,其中主要有8中基本數據類型和引用數據類型,除了8中基本數據類型以外都是引用數據類型,8中基本數據類型分別是byte,short,int,long,char,boolean,float,double,具體如下:
1、boolean:數據值只有true或false,適用於邏輯計算。
2、char:char型(字元型)數據在內存中佔用2個位元組。char型數據用來表示通常意義上的字元,每個字元佔2個位元組,Java字元採用Unicode編碼,它的前128位元組編碼與ASCII兼容字元的存儲範圍在\u0000~\uFFFF,在定義字元型的數據時候要注意加’
‘,比如
‘1’表示字元’1’而不是數值1,
3、byte:byte型(位元組型)數據在內存中佔用1個位元組,表示的存儲數據範圍為:-128~127。
4、short:short型(短整型)數據在內存中佔用2個位元組。
5、int:int型(整型)數據在內存中佔用4個位元組。
6、long:long型(長整型)數據在內存中佔用8個位元組。
7、float:float型(單精度浮點型)數據在內存中佔用4個位元組。(float精度為7-8位)
8、double:double型(雙精度浮點型)數據在內存中佔用8個位元組。
Java中所有的基本數據類型都有固定的存儲範圍和所佔內存空間的大小,而不受具體操作系統的影響,來保證Java程序的可移植性。整形數據默認為int數據類型,浮點型默認為double數據類型,如果要表示long型數據或float型數據,要在相應的數值後面加上l、L或f、F,否則會出現編譯問題。
在其他語言中如C語言中,字元型數據和整型數據是可以相互轉換的,都是以ASCII碼來存儲,可以將字元型數據當整型數據來看待。
JAVA中值類型和引用類型的區別
(1)值類型:數據存儲在內存的堆棧中,從堆棧中可以快速地訪問這些數據,因此,值類型表示實際的數據。
(2)引用類型:對象、數組、函數。
1、值類型:包括:sbyte、short、int、long、float、double、decimal(以上值類型有符號)byte、ushort、uint、ulong(以上值類型無符號)bool、char
2、引用類型:包括:對象類型、動態類型、字元串類型。二、具體區別:
1、值類型:byteb1=1;byteb2=b1;Console.WriteLine(“{0},{1}。”,b1,b2);b2=
2;Console.WriteLine(“{0},{1}。”,b1,b2);Console.ReadKey();解釋:byteb1=1;聲明b1時,在棧內開闢一個內存空間保存b1的值1。byteb2=b1;聲明b2時,在棧內開闢一個內存空間保存b1賦給b2的值1。Console.WriteLine(“{0},{1}。”,b1,b2);輸出結果為1,1。b2=2;將b2在棧中保存的值1改為
2。Console.WriteLine(“{0},{1}。”,b1,b2);輸出結果為1,2。
2、引用類型:複製代碼。
Java里什麼是引用類型?
最簡答來說除了8中基本類型以外剩下的都是引用類型
Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類
boolean –Boolean
char —Character
byte –Byte
short –Short
int –Integer
long –Long
float –Float
double –Double
引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關。同時為了面向對象操作的一致性,這些基本類型都有相應的封裝類型:Integer、Short、Long、Byte、Float、Double、Character等。
因為封裝類型是對象,所以可以進行相應的很多對象能力函數操作,這樣就可以提供很多基本類型難以完成的工作的完成和實現。
你可以通過以下方式來聲明該類型。
int a,a為int類型的變數
char a,a為char類型的
String對象
1. 首先String不屬於8種基本數據類型,String是一個對象。
因為對象的默認值是null,所以String的默認值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性。
2. new String()和new String(「」)都是申明一個新的空字元串,是空串不是null;
3. String str=」punkll」;
String str=new String (「punkll」);的區別:
在這裡,我們不談堆,也不談棧,只先簡單引入常量池這個簡單的概念。
常量池(constant pool)指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。它包括了關於類、方法、介面等中的常量,也包括字元串常量。
看例1:
String s0=」punkll」;
String s1=」punkll」;
String s2=」punk」 + 「ll」;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
結果為:
true
true
首先,我們要知結果為道Java會確保一個字元串常量只有一個拷貝。
因為例子中的s0和s1中的」punkll」都是字元串常量,它們在編譯期就被確定了,所以s0==s1為true;而」punk」和」ll」也都是字元串常量,當一個字元串由多個字元串常量連接而成時,它自己肯定也是字元串常量,所以s2也同樣在編譯期就被解析為一個字元串常量,所以s2也是常量池中」punkll」的一個引用。
所以我們得出s0==s1==s2;
用new String() 創建的字元串不是常量,不能在編譯期就確定,所以new String() 創建的字元串不放入常量池中,它們有自己的地址空間。
看例2:
String s0=」punkll」;
String s1=new String(」punkll」);
String s2=」punk」 + new String(「ll」);
System.out.println( s0==s1 );
System.out.println( s0==s2 );
System.out.println( s1==s2 );
結果為:
false
false
false
例2中s0還是常量池中」punkll」的應用,s1因為無法在編譯期確定,所以是運行時創建的新對象」punkll」的引用,s2因為有後半部分new String(「ll」)所以也無法在編譯期確定,所以也是一個新創建對象」punkll」的應用;明白了這些也就知道為何得出此結果了。
java中的引用數據類型是怎樣的?
java中有兩種數據類型:基本類型和引用類型。
基本類型有8個:
整數類型 byte、short、int、long
浮點數類型 float、double
字元型 char
布爾類型 boolean
引用類型包括三種:
類 Class
介面 Interface
數組 Array
基本類型是通過諸如 int a = 5; long b = 6L;的形式來定義的,稱為自動變數,自動變數存放的是字面值,不是類的實例,它存放在內存的堆棧中,數據大小和生存期必須是確定的,存取速度比較快,在堆棧中的字面值可以共享,也就是說我們定義一個int a = 5;然後又定義了一個int b = 5;這時a與b在內存中指向的是同一個字面常量。
引用類型一般是通過new關鍵字來創建,比如Integer num = new Integer(3);它存放在內存的堆中,可以在運行時動態的分配內存大小,生存期也不必事先告訴編譯器,當引用類型變數不被使用時,Java內部的垃圾回收器GC會自動回收走。引用變數中存放的不是變數的內容,而是存放變數內容的地址。
在參數傳遞時,基本類型都是傳值,也就是傳遞的都是原變數的值得拷貝,改變這個值不會改變原變數,而引用類型傳遞的是地址,也就是參數與原變數指向的是同一個地址,所以如果改變參數的值,原變數的值也會改變。這點要注意。
在java中,8種基本類型在java中都有對應的封裝類型,也就是引用類型:
整數類型 Byte、Short、Integer、Long
浮點數類型 Float、Double
字元型 Character
布爾類型 Boolean
有時候我們會看到這樣的語句 Integer num = 3;Boolean b = true;這樣定義也能行得通,其實這裡面有一個自動裝箱的問題,即java自動把3這個字面常量封裝成了Integer對象,同理也有自動拆箱。
還有些需要注意的比較特殊的地方:
1.Integer類型
Integer i1 = 3;
Integer i2 = 3;
此時i1 == i2 返回的是true
Integer i1 = 128;
Integer i2 = 128;
此時i1 == i2返回的是false,
這時因為Integer的數值在-128~127之間時,即在int的範圍內,默認是按照基本類型int來存放的,仍舊存在堆棧中,如果超出了int的範圍,就按照對象的方式來存放和比較了。
2、String類型
String類型我們有時候也會直接這樣定義:
String s = “abc”;
這裡的”abc”稱為字元串常量,也是存在堆棧中的,s中存放的就是指向這個堆棧地址的引用,如果再定義一個
String s1 = “abc”;
這時,s與s1存放的是同一個地址的引用,即s與s1指向的是同一個字元串常量,
s == s1的值是true,
但是如果有
String s2 = new String(“abc”);
這時s == s2則為false,因為使用new之後,每次生成的對象都不是同一個,即使存儲的內容相同。
上面的s == s1,s == s2其實比較的都是地址,並不是裡面的內容。如果要比較內容,可以使用equals()方法。
其他的就不多說了,打起來太慢了,可以自己去看一下java編程思想。
java中的引用數據類型是什麼意思?
引用數據類型為java兩大數據類型之一
引用數據型在被床架時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址。
引用數據類型包括:類、介面類型、數組類型、枚舉類型、註解類型,字元串型;
java另一大數據類型為基本數據類型,其包括包括數值型,字元型和布爾型。
基本數據類型在被創建時,在棧上給其劃分一塊內存,將數值直接存儲在棧上;
北大青鳥設計培訓:java編程引用類型分析?
我們在使用java編程開發語言開發軟體的時候通常都會new對象,然後通過對對象的引用來實現不同的編程需求,而今天電腦培訓就一起來了解一下,java編程開發語言中都有哪些常見的引用方法。
1:虛引用1.1簡介:虛引用是所有引用中強度弱的,它完全類似於沒有引用,在java.reflact.PhantomReference類中實現。
虛引用對象本身沒有太大影響,對象甚至感覺不到虛引用的存在。
如果一個對象存在虛引用,那麼它和沒有引用的效果大致相同,虛引用無法引用任何堆中的對象作用:虛引用主要用於跟蹤對象被JVM垃圾回收的狀態,可以通過它來手機GC的行為。
可以通過檢查與虛引用關聯的引用隊列中是否已經包含指定的虛引用,從而了解虛引用鎖引用的對象是否被回收。
注意:虛引用無法單獨使用,虛引用必須和引用隊列(ReferenceQueue)聯合使用.被虛引用所引用對象被垃圾回收後,虛引用將被添加到引用隊列中。
2:弱引用簡介:弱引用和虛引用有點類似,不同之處在於虛引用鎖引用的對象生存期比虛引用長一點。
虛引用在java.reflact.WeakReference類實現。
在系統進行垃圾回收的時候,不管系統內存是否足夠,總是回收該對象所佔用的內存.但是弱引用的強度是要大於虛引用的3:軟引用簡介:軟引用比弱引用的強度高一點,它是通過java.reflact.SoftReference來實現。
對於軟引用來說,當系統內存空間足夠時,它不會被系統回收,程序中改對象的引用也是有效的。
而當系統的內存空間不夠時,系統將會回收它。
作用:軟引用是強引用好的替代,它一定程度上可以避免系統內存不足的異常,可以充分使用軟引用來解決內存緊張的問題。
4:強引用簡介:強引用很常見,在平時的程序中,我們新new一個對象,比如Objectobject=newObject();那麼這個object就是指向object對象的強引用。
強引用的特點就是:被引用的java對象絕對不會被垃圾回收機制回收,即使系統的內存非常緊張,即使java以後也用不到,jvm不會回收強引用所引用的java對象。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158930.html