1. java中的引用數據類型

java數據類型圖:
┏數值型━┳━整數型:byte short int long
┏基本數據類型━━┫ ┗━浮點型:float double
┃ ┣字元型:char
數據類型╋ ┗布爾型:boolean
┃ ┏類(class)
┗引用數據類型━━╋介面(interface)
┗數組(array)
java的數據類型分基本數據類型(原始數據類型)和引用數據類型;
1.基本八大類,圖中可以很清楚的看到;這種類型的數據變數在聲明之後java就會立刻分配給他內存空間。如:short a; java會在可使用的內存空間尋找一個占兩個位元組的塊給a變數;
2.引用數據類型就那三種,類似C/C++的指針,它以特殊的方式指向對象實體(具體的值),這類變數聲明時不會分配內存,只是存儲了一個內存地址,想具體知道看看數據結構就好了。

通俗講,一、上圖記住很夠用;二、說內存、談地址基本都是說引用而非基本;三、你可以把內存地址理解是你學號,而對象實體就是你,每次找你通過學號找,這就是引用;

這個知識點的應用:
1.「==」作用在引用數據類型間,判斷內存地址是否相等,想判斷內容實體用equals;
2、基本傳值傳參傳的是副本,修改後原值不變;引用傳值傳參穿的是地址,修改後原值改變。

本人不才,大概就想到這么多吧,共同成長~~~

2. java中值類型和引用類型的區別

1:Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。 原始類型封裝類 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關。
2:使用場合,例如說
往ArrayList裡面add,必須add的是Object
而int不是對象,就只能把Integer添加進去
3:int是基本類型,
Integer是int對應的封裝類,
聲明int a; a自動賦值0;
聲明Integer a; a自動賦值為null
4:int是基本的數據類型
integer是類
int的初始值為0,不能為null,如果需要為null的時候,需要用integer

3. 關於Java引用類型變數

比如:String s = new String();這個其實是在棧內存里分配一塊內存空間為s,在堆內存里new了一個String類型的空間,在運行時是 棧內存里的 s 指向堆內存里的那一塊存儲空間

4. JAVA的基本數據類型和引用數據類型的區別

一、作用的不同

1、引用類型一般都是通過new關鍵字創建對象,然後把這個對象賦予給相應的內變數,最常用的容引用類型是String類型,它也比較特殊,可以直接通過關鍵字new來創建對象,也可以通過字元串直接賦值,比如:

Strings=newString("abc");

Strings="abc";

2、基本類型就是直接賦值就可以了,比如:

inta=123;

floatb=123.0;

boolean=true;

二、參數方面傳遞的不同

引用類型是引用傳遞

基本類型是值傳遞

三、比較方面的不同

引用類型比較的是引用地址(沒有重寫equals方法)

基本類型比較的是值

五、類型的不同

1、引用類型分為四種

強引用(StrongReference)

軟引用(SoftRefernce)

弱引用(WeakReference)

虛引用(PhantomReference)

強引用-StrongReference

2、八種基本類型

整型byte8位

整型short16位

整型int32位

整型long64位

浮點型float32位

浮點型double64位

字元型char16位

布爾型boolean位數不確定

5. java中的引用數據類型是什麼意思

  1. 引用數據類型為java兩大數據類型之一

  2. 引用數據型在被床架時,首先要在棧上給其引用(句內柄)分配一塊內存,而對象的容具體信息都存儲在堆內存上,然後由棧上面的引用指向堆中對象的地址。

  3. 引用數據類型包括:類、介面類型、數組類型、枚舉類型、註解類型,字元串型;

  • java另一大數據類型為基本數據類型,其包括包括數值型,字元型和布爾型。

  • 基本數據類型在被創建時,在棧上給其劃分一塊內存,將數值直接存儲在棧上;

6. 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編程思想。

7. JAVA 幾種引用類型學習

1)強引用(StrongReference)
強引用是使用最普遍的引用。如果一個對象具有強引用,那垃圾回收器絕不會回收它。當內存空間不足,Java虛擬機寧願拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足的問題。

2)軟引用(SoftReference)
如果一個對象只具有軟引用,則內存空間足夠,垃圾回收器就不會回收它;如果內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。軟引用可用來實現內存敏感的高速緩存(下文給出示例)。
軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收器回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。

3) 弱引用(WeakReference)
弱引用與軟引用的區別在於:弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由於垃圾回收器是一個優先順序很低的線程,因此不一定會很快發現那些只具有弱引用的對象。
弱引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。

4)虛引用(PhantomReference)
「虛引用」顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用並不會決定對象的生命周期。如果一個對象僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。
虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用隊列(ReferenceQueue)聯合使用。當垃圾回收器准備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到與之 關聯的引用隊列中。

程序可以通過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。如果程序發現某個虛引用已經被加入到引用隊列,那麼就可以在所引用的對象的內存被回收之前採取必要的行動。

8. 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」的應用;明白了這些也就知道為何得出此結果了。

9. 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碼來存儲,可以將字元型數據當整型數據來看待。