Java教程 Java語言中的數(shù)據(jù)類型及String類
本文是Java教程之Java語言中的數(shù)據(jù)類型及String類部分。
Java類中的主要組成部分就是數(shù)據(jù)成員和方法成員。而數(shù)據(jù)成員的聲明必須指定其數(shù)據(jù)類型,方法成員的聲明也必須指定其返回值類型,如果方法有形式參數(shù),也必須指定其參數(shù)類型。因此,對(duì)于初學(xué)者來說,了解Java語言的數(shù)據(jù)類型是非常必要的。
Java語言中的數(shù)據(jù)類型可以分為兩大類,即基本數(shù)據(jù)類型(也有人稱為原始類型)和引用類型(也有人稱類類型,對(duì)象類型等)。Java語言是面向?qū)ο蟮恼Z言,大多數(shù)數(shù)據(jù)都是引用類型,基本類型主要為了進(jìn)行數(shù)學(xué)運(yùn)算。下面對(duì)這兩種類型分別進(jìn)行介紹。
1.基本數(shù)據(jù)類型:
Java中的基本數(shù)據(jù)類型分4大類
整型:byte,short,int,long
浮點(diǎn)型:float,double
字符型:char
邏輯型(也稱布爾型):boolean(true、false)
值得一題的是,Java中的基本數(shù)據(jù)類型的數(shù)據(jù)長度是跨平臺(tái)的,不會(huì)因?yàn)檫\(yùn)行的平臺(tái)不同而不同。
另外需要注意的是,整型默認(rèn)以32位的int存儲(chǔ),浮點(diǎn)型默認(rèn)以64位的double存儲(chǔ)。如下面例子:
- package com.csst.test;
- public class TestType {
- /**
- * @param args
- */
- public static void main(String[] args) {
- float f=1.0;//會(huì)有編譯錯(cuò)誤
- }
- }
出現(xiàn)錯(cuò)誤的一行,主要就是因?yàn)閿?shù)據(jù)類型轉(zhuǎn)換引起。1.0是浮點(diǎn)型,默認(rèn)以64位的double存儲(chǔ),而程序中將1.0聲明位32位的float,就會(huì)出現(xiàn)編譯錯(cuò)誤。基本原則是高精度的數(shù)不能直接賦值給低精度的數(shù)。修改如下:
float f=(float) 1.0;
稱為強(qiáng)制類型轉(zhuǎn)換。
2.引用類型:
可以說,除了基本數(shù)據(jù)類型以外的數(shù)據(jù),都是引用類型。也可以說,引用類型就是對(duì)象,或者對(duì)象都是引用類型。很多人會(huì)有一個(gè)疑問,字符串算什么類型?讓我們看看,在基本類型的8個(gè)類別中,沒有字符串,那么可以肯定的說,字符串是引用類型。但是接下來的疑問就是,引用類型都是對(duì)象,對(duì)象不都是用new創(chuàng)建出來的么?為什么我們常常看到如下語句:
String s=”Hello World”;
其實(shí),在所有的類中,包括我們自己創(chuàng)建的類,以及API中已有的類,只有String這個(gè)類比較特殊,可以直接使用=進(jìn)行賦值,不用使用new關(guān)鍵字。但是String既然是對(duì)象,也可使用new創(chuàng)建,如:
String s=new String(“Hello World”);
那么這兩種聲明方式,有何不同?如果使用new關(guān)鍵字創(chuàng)建,那么每次創(chuàng)建,都是在內(nèi)存空間初始化一個(gè)新的字符串對(duì)象,而如果使用=創(chuàng)建,并不會(huì)每次都初始化一個(gè)新的。而是會(huì)看一下實(shí)例池中是否有字符序列相同的字符串,如果有,就將引用指向該空間,如果沒有,才初始化,如下:
- String s1=”abc”;
- String s2=”abc”;
- String s3=new String(“abc”);
- String s4=new String(“abc”);
其中假設(shè)s1賦值時(shí),在實(shí)例池中沒有找到abc字符串,那么s1就被初始化到內(nèi)存中。但是創(chuàng)建s2時(shí),由于已經(jīng)有了一個(gè)用=號(hào)創(chuàng)建的abc了,將不會(huì)創(chuàng)建新的對(duì)象,而是將s2也指向跟s1相同的空間,共享s1的abc。而s3,s4由于是使用new創(chuàng)建的,所以都會(huì)新創(chuàng)建對(duì)象,在內(nèi)存中初始化新的abc字符串。
String類有這樣的特性,源于String類另一個(gè)特征:String對(duì)象是不可變的。也就是說,不管通過哪個(gè)方式初始化到內(nèi)存中的字符串,都是不能被修改的。如:
String s=”abc”;
s=”def”;
當(dāng)s被重新賦值時(shí),并不是修改了abc,而是會(huì)新開辟內(nèi)存空間,初始化新的字符串def。
【編輯推薦】