pandas 多條件篩選DataFrame
技術標籤:java必須掌握的基礎java程式語言
文章目錄
一、資料型別的劃分
資料型別劃分
資料型別在程式語言的構成要素中佔有相當重要的地位。Java的資料型別可分為基本資料型別與引用資料型別。
原始資料型別也稱為基本資料型別,它們包括了最基本的boolean、bytc、char、short、int、Jong、float 與 double 等型別。另一種資料型別為引用資料型別,它是以一種特殊的方式指向變數的實體,這種機制類似於 C/C++的指標。這類變數在宣告時不會分配記憶體,必須另外進行開闢記憶體空間的操作,如字串與陣列均屬於這種資料型別。在Java 中規定了8種基本資料型別變數來儲存整數、浮點數、字元和布林值,如圖所示。
二、基本資料型別
到目前為止,相信讀者已經對 Java有了一些初步的認識,如果想在程式中使用一個變數,就必須先宣告,此時編譯程式會在未使用的記憶體空間中尋找一塊足夠能儲存這個變數的空間以供這個變數使用。Java的基本資料型別如表3-1所示
2.整數型別
當資料不帶有小數或分數時,可以宣告為整數變數,如3、-147等即為整數。在Java中,整數資料型別可以分為long、int、short及byte 4種,long為64位,也就是8個位元組(bytes),可表示範圍為-9223372036854775808~9223372036854775807;int為32位,也就是4個位元組,表示範圍為-2147483648~2147483647;若資料值的範圍為-32768~32767時,可以宣告為short(短整數)型別;若資料值更小,在-128~127之間時,可以宣告byte型別,以節省記憶體空間。例如,宣告一個短整型變數sum時,可以在程式中作出如下宣告
short sum ; // 宣告sum為短整型
經過宣告之後,Java即會在可使用的記憶體空間中尋找一個佔有兩個位元組的塊供sum變數使用,同時,這個變數的範圍只能在-32768~32767之間。
在Java 中對於一個整型常量,其型別預設的就是int型,所以讀者在宣告常量時不要超過int資料型別的範圍。
範例:以下程式碼驗證瞭如果資料過長則有可能出現的問題
Class DateDemo01{
public static void main(String[] args){
//定義整型變數,錯誤超出長度範圍
int num=9999999999999999999999999 ;
}
}
以上程式碼為int變數初始化時超過了其本身的範圍的情況,所以在編譯程式時出現了以下的錯誤提示:
DateDemo01.java:3:integer number too large:9999999999999999999999999
int num = 9999999999999999999999999;//定義整型變數,錯誤,超出長度範圍
1 error
3.整數的溢位
當整數的資料大小超出了可以表示的範圍,而程式中有沒有做數值範圍的檢查時,這個整型變數所輸出的值將發生混亂,且不是預期的執行結果.在下面的程式範例中聲明瞭一個整數的數,並把它賦值為整型所可以表示範圍的最大值,然後將它分別加1及加2.
範例:將整型的最大值1和加2
class DateDemo02{
public static void main(String[] args){
int max = Integer.MAX_VALUE; //得到整型的最大值
System.out.println("整型的最大值"+max);//輸出最大值
System.out.println("整型最大值+1"+(max+1));//最大值加1
System.out.println("整型最大值+2"+(max+2));
}
}
程式執行的結果
整型最大的值:2147483647
整型最大值+1:-2147483648
整型最大值+2:-2147483647
當最大值加上1時,結果變成表示範圍中最小的值;最大值加上2時,結果變成表示範圍中次小的值,這就是資料型別的溢位。讀者可以發現,上面例子會出現一個迴圈,若是想避免這種情況的發生,在程式中就必須加上數值範圍的檢查功能,或者使用較大的表示範圍的資料型別,如長整型。
當聲明瞭一整數X,其表示的範圍為-2147483648~2147483647之間,當x的值設為最大值 2147483647,仍在整數的範圍內,但是當x加1或加2時,整數x的值反而變成-2147483648和-2147483647,成為可表示範圍的最小及次小值。
上面的情形就像計數器的內容到最大值時會自動歸零一樣。而在整數中最小值為-2147483648,所以當整數x的值最大時,加上1就會變成最小值-2147483648,也就是產生了溢位。可以參考圖3-2來了解資料型別的溢位問題。
為了避免int型別的溢位,可以在該表示式中的任一常量後加上大寫的,或在變數前面加上long,做強制型別的轉換。在下面的程式中加上防止溢位的處理,為了讓讀者方便比較,特意保留一個整數的溢位語句。
範例:使用強制型別轉換,防止資料溢位
class DateDemo03{
public static void main(String[] args){
int max = Integer.MAX_VALUE; //得到整型的最大值
System.out.println("整型的最大值"+max);//輸出最大值
System.out.println("整型最大值+1"+(max+1));//最大值加1
System.out.println("整型最大值+2"+(max+2L));
System.out.println("整型最大值+2:"+((long)max+2)); //強制轉換為long型
}
}
程式執行的結果:
整型的最大值:2147483647
整型的最大值+1:-2147483648
整型最大值+2:2147483649
整型最大值+2:2147483649
由上面的程式可知,處理int型別的溢位,可以利用強制型別轉換的方式.但是對於long型別的溢位,就沒有處理辦法了,此時就需要在程式中加上變數值的界限檢查,在執行是,才不會發生錯誤.
4.字元型別
字元型別在記憶體中佔有兩個位元組,可以用來儲存英文字母等字元.計算機處理字元型別是,是把這些字元當成不同的整型來看待,因此嚴格來說,字元型別也算是整數型別的一種.
在計算機的世界裡,所有的文字、數值都只是一連串的0與1,這些0與1對於設計者來說實在是難以理解,於是就產生了各種方式的編碼,它們通過指定一個數值來代表某個字元,如常用的字元碼系統ASCII。
雖然各類的編碼系統合起來有數百種之多,卻沒有一種是包含足夠的字元、標點符號及常用的專業技術符號。這些編碼系統之間可能還會有相互衝突的情形發生,也就是說,不同的編碼系統可能會使用相同的數值來表示不同的字元,在資料跨平臺時就會發生錯誤。
Unicode 就是為了避免上述情況的發生而產生的,它為每個字元制訂了一個唯一的數值,因此,在任何的語言、平臺、程式中都可以安心地使用。Java 所使用的就是 Unicode字元碼系統。
例如,Unicode中的小寫a是以97來表示的,在下面的程式中可以看到,宣告字元型別的變數ch1、ch2,分別將變數chl的值設為97,ch2的值設為字元a,再輸出字元變數chl及ch2的內容。
範例:測試字元和整型之間的相互轉換
範例:測試字元和真心之間的互相轉換
public class DateDemo04{
public static void main(String[] args){
char ch1 ='a';//定義字元
char ch2 =97; //定義字元,整型轉字元
System.out.println("ch1="+ch1);
System.out.println("ch2="+ch2);
}
}
程式執行結果:
ch1 =a ;
ch2 = a;
給字元變數賦值可以使用數值和字元,他們都可以使程式正確的執行.要注意的是,字元要只用一對單引號(’ ')括起
序號 | 轉義字元 | 描述 |
---|---|---|
1 | \f | 換頁 |
2 | \ | 反斜槓 |
3 | \b | 倒退一格 |
4 | ’ | 單引號 |
5 | \r | 歸為 |
6 | " | 雙引號 |
7 | \t | 製表符 |
8 | \n | 換行 |
5.浮點數型別與雙精度浮點數型別
在日常生活中經常會使用到小數型別的數值,如身高,體重,整數將不能滿足程式設計者的要求.在數學中,這些帶有小數點的數值稱為實數,在Java中,這種資料型別稱為浮點數型別(float),其長度為32個位元組.當浮點數的表示範圍不夠大時,還有一種雙精度(double)浮點數可供使用.雙精度浮點型別的長度為64個位元組.
浮點數的表示方式除了指數的形式之外,還可以用帶有小數點的一般形式來表示.例如,想宣告一個double型別的變數num與一個float型別的變數sum,並同時給sum賦初始值3.0,可以在程式中做出如下宣告及其設定:
double num; //宣告num為雙精度浮點型變數
float sum = 3.0f; //宣告sum為浮點型變數, 其初始值為3.0
宣告之後,Java即會在可使用的記憶體空間中尋找一個佔有8個字元節的塊供num變數使用
6.布林型別
布林(boolean)型別的變數只有true(真)和false(假)兩種,也就是說,當將一個變數定義成布林型別時他的值只能是true或false,除此之外沒有其他的值可以賦值給這個變數.例如,宣告名稱為flag變數的布林型別,並設定為true值,可以使用下面的語句:
boolean flag = true;//宣告布林變數flag,賦值true
經過聲明後,布林變數的初值即為true,當然如果程式中需要更改status的值時,可以隨時更改.
7.基本資料型別的預設值
在Java中,若在變數的宣告時沒有給變數賦初值,則會給該變數賦預設值
序號 | 資料型別 | 預設值 |
---|---|---|
1 | byte | (byte)0 |
2 | short | (short) 0 |
3 | int | 0 |
4 | long | 0L |
5 | float | 0.0f |
6 | double | 0.0d |
7 | char | /u0000(空,") |
8 | boolean | false |
在某些情形下,Java會給予這些沒有賦初始值的變數一個確切的預設值,這沒有任何的意義,是滅有必要的,但應該保證程式執行時不會有這種未定義值的變數存在.雖然這種方式給程式設計者帶來很多的遍歷,但是過去以來系統給變數賦初始值.就不容易檢測到是飯否已經給變數應有值了,這是需要注意的問題.