国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中包裝類介紹與其注意事項

Java中包裝類介紹與其注意事項

2020-08-02 12:13AllenWang Java教程

Java語言是一個面向對象的語言,但是Java中的基本數據類型卻是不面向對象的,這在實際使用時存在很多的不便,所以在設計類時為每個基本數據類型設計了一個對應的類進行代表,這樣八個和基本數據類型對應的類統稱為包裝類,

前言

大家都知道在Java中,除了8種基本數據類型外,其他的都是引用類型。使用引用類型是為了更好地貫徹面向對象的思想,那為什么還要保留8種基本數據類型呢?

這其實更多地是照顧程序員的習慣。為了既照顧程序員的習慣,同時又能全面貫徹面向對象編程的思想,Java中引入了包裝類機制。

所謂的包裝類就是為8種基本數據類型分別定義了相應的引用類型,其對應關系如下:

Java中包裝類介紹與其注意事項

顯然,除了int及char外,其余的包裝類都是將對應的基本數據類型的首字母大寫即可。 那為什么要引入包裝類呢?前面已經說過,是為了全面貫徹面向對象的編程思想,具體地說就是非引用類型的數據在使用時會有許多制約,比如List list=new ArrayList();對于引用類型,可直接使用list.add(obj);進行添加,但是對于基本數據類型則無法添加,從而不能使用ArrayList中的許多方法(如排序、刪除等),顯然會造成許多不便,而使用包裝類則可以很好地避免這種缺陷。

同時,從JDK 1.5開始提供了自動裝箱和自動拆箱的功能,因而目前可以有以下3種初始化包裝類的方法:

方法1:直接傳入相應的基本數據類型變量或常量,如

?
1
2
3
int a1=3;Integer a2=new Integer(a1);
Float f=new Float(3.14f);
Boolean b=new Boolean(true);

方法2:通過傳入字符串,如

?
1
2
3
Integer a=new Integer("3");
Float f=new Float("3.14");
Boolean b=new Boolean("true");

值得注意的是使用"True"也可以,如Boolean b=new Boolean(“True”);

方法3:通過自動裝箱功能,如Integer a=3;Float f=3.14f;Boolean b=true;值得注意的是可使用new Float(“3.14”)new Float(“3.14f”)這樣的語句來初始化Float類型變量,但是卻不能使用Float f=3.14;來初始化Float類型變量,因為3.14是double類型,它只能被自動裝箱為Double類型變量。

我們知道,引用類型使用==進行比較時,只有當二者指向同一個對象時,才會返回true,否則即使值相等也返回false.包裝類也屬于引用類型,所以以下代碼的執行結果為false,

?
1
2
3
Float f1=new Float(3.14f);
Float f2=new Float(3.14f);
System.out.println(f1==f2);

但是,下面一段代碼的輸出結果卻和前面討論的不一樣,這是為什么呢?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
 
public class TestWrapperClass
{
 public static void main(String[]args)
 {
 Integer t1=3;
 Integer t2=3;
 System.out.println(t1==t2);
 
 Integer t3=128;
 Integer t4=128;
 System.out.println(t3==t4);
 
 Boolean b1=true;
 Boolean b2=true;
 System.out.println(b1==b2);
 }
}

其輸出結果如下圖所示:

Java中包裝類介紹與其注意事項

如果按照前面的討論,應該都輸出false才對,但這里t1與t2,b1與b2的比較結果卻為true.這不科學??!

原來,Java為了獲得更高的執行效率,在某些類的設計中引入了緩存機制!

此處的Integer及Boolean類的設計即是如此。java.lang.Integer類的部分源代碼如下所示:

?
1
2
3
4
5
static final Integer[]cache=new Integer[-(-128)+127+1];
static{
for(int i=0;i<cache.length;i++)
 cache[i]=new Integer[i-128);
}

顯然,系統把-128~127之間的整數裝箱成Integer實例,并通過cache數組進行緩存,所以只要是-128~127之間的Integer類型變量,其指向的對象都是cache數組成員,從而只要有兩個值相同且在-128~127之間的Integer變量,它們指向的對象就是同一個,故采用==進行比較時也返回true.Boolean的情形與之類似。

實際上,不只是在Java中,在Android中的一些類也采用了緩存機制,如Android中的ListView就是一個典型的例子,在繼承的方法getView中,convertView其實就是采用了緩存機制,從而大大節省了系統資源開支,加快了圖形渲染的速度。此處暫且不表,在后面還會再提到。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言留言交流。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线精品一区 | 在线手机电影 | 亚洲国产成人久久 | 日韩在线观看中文字幕 | 黑人中文字幕一区二区三区 | 久久免费电影 | www.xxx在线观看 | 亚洲视频三区 | 不卡av电影在线观看 | 日韩国产精品一区二区三区 | 国产精品久久久久久婷婷天堂 | 中文日韩在线 | 天天天天操 | 亚洲 激情 在线 | 亚洲黄色片免费观看 | 亚洲精品视频免费观看 | 精品精品 | 久久久久黄 | 精品久久久久久亚洲综合网 | 麻豆产精国品免费 | 狠狠干av | 99热精品国产 | 国产一区二区三区 | 91久久| yy6080一级二级| 日韩在线免费观看网站 | 97精品在线| 国内外精品一区二区三区 | 国产激情网 | 中文字幕第5页 | 夜夜爽99久久国产综合精品女不卡 | 中文字幕1区2区3区 亚洲欧美日韩精品久久亚洲区 | 久久精品无码一区二区三区 | 国产精品久久a | 中文字幕免费视频 | 久久国产欧美日韩精品 | 在线第一页 | 中文在线日韩 | 国产欧美日韩在线 | av在线电影网站 | 久久久久高清 |