1. 程式人生 > >java基本資料型別byte short int long float double char

java基本資料型別byte short int long float double char

byte 是 Java 原始型別。byte型別簡稱“位元組型”,用於表示整數。
int 是 Java 原始型別。 int型別簡稱“整型”,用於表示整數。
short是java原始型別。 short型別簡稱“短整型”,用於表示整數。
long是java原始型別。 long型別簡稱“長整型”,用於表示整數。
byte、short、int、long 的初始預設值皆為 0 。


1. 取值範圍

(1) byte

  • byte型別佔1個位元組,即8位,其中最高位為符號位。
    所以,byte型別的取值範圍為28−28

(2) int

  • int型別 佔4個位元組,即32位,其中最高位為符號位。
    所以,int型別的整數取值範圍為: 231−231

(3) short

  • short型別佔2個位元組,即16位,其中最高位為符號位。
    所以,short型別的整數取值範圍為: 215−215

(4) long

  • long型別佔8個位元組,即64位,其中最高位為符號位。
    所以,short型別的整數取值範圍為: 263−263

2. 資料溢位

這裡討論的“資料溢位”是指資料超出所定義資料型別的範圍。

先看 一段程式碼(程式碼1):

        byte
a=127; byte b=-128; System.out.println("a+1="+(a+1)); System.out.println("b+1="+(b-1));
  • 1
  • 2
  • 3
  • 4
  • 5

執行結果為:
a+1=128
b-1=-129

再看另一段程式碼(程式碼2):

        byte a=127;
        byte b=-128;

        System.out.println("(byte)(a+1)="+(byte)(a+1));
        System.out
.println("(byte)(b-1)="+(byte)(b-1));
  • 1
  • 2
  • 3
  • 4
  • 5

執行結果為:
(byte)(a+1)=-128
(byte)(b-1)=127

  • 討論1:為什麼程式碼1的執行結果能超出byte型別的取值範圍?
                 當溢位使得資料結果超過 8 位,則只取低 8 位進行計算:”127 + 256 = 383“ ,388 用二進位制表示為 1 0111 1111 ,已經超過 8 為,所以只去低 8 位 0111 1111 。0111 1111 首位為 0 ,代表整數。因為 0111 1111 為 127,所以”127 + 256 = 127“。
    (short、int、long 型別資料溢位後規律與 byte 型別一樣)


三. int 與 Integer 的區別

(byte 與 Byte 、short 與 Short 、long 與 Long 的區別皆和 int 與 Integer 的區別類似)

int 是語言本身的最基本的型別,而 Integer 是基於 int 的一個包裝類,它有屬性及方法。

對於包裝類說,這些類的用途主要包含兩種:
a. 作為和基本資料型別對應的類型別存在,方便涉及到物件的操作。
b. 包含每種基本資料型別的相關屬性如最大值、最小值等,以及相關的操作方法。

Interger 在 java.lang 包中是這樣定義的(程式碼3):

 public Integer(int value) {
        throw new RuntimeException("Stub!");
    }
  
  • 1
  • 2
  • 3

因此在程式中建立一個 Integer 物件的方式為(程式碼4):

Integer in=new Integer(5);
  
  • 1
  • Integer 類中的欄位、方法

欄位摘要

型別 欄位名 意義
static int MAX_VALUE 保持 int 型別的最大值的常量可取的值為 231-1。
static int MIN_VALUE 保持 int 型別的最小值的常量可取的值為 -231。
static int SIZE 以二進位制補碼形式表示 int 值的位數。
static Class TYPE 表示基本型別 int 的 Class 例項。

方法摘要

返回值型別 方法名(引數) 作用
static int bitCount(int i) 返回指定 int 值的二進位制補碼錶示形式的 1 位的數量。
byte byteValue() 以 byte 型別返回該 Integer 的值
int compareTo(Integer anotherInteger) 在數字上比較兩個 Integer 物件。
static Integer decode(String nm) 將 String 解碼為 Integer。
double doubleValue() 以 double 型別返回該 Integer 的值。
boolean equals(Object obj) 比較此物件與指定物件。
float floatValue() 以 float 型別返回該 Integer 的值。
static Integer getInteger(String nm) 確定具有指定名稱的系統屬性的整數值。
static Integer getInteger(String nm, int val) 定具有指定名稱的系統屬性的整數值。
static Integer getInteger(String nm, Integer val) 返回具有指定名稱的系統屬性的整數值。
int hashCode() 返回此 Integer 的雜湊碼。
static int highestOneBit(int i) 返回具有至多單個 1 位的 int 值,在指定的 int 值中最高位(最左邊)的 1 位的位置。
int intValue() 以 int 型別返回該 Integer 的值。
long longValue() 以 long 型別返回該 Integer 的值。
static int lowestOneBit(int i) 返回具有至多單個 1 位的 int 值,在指定的 int 值中最低位(最右邊)的 1 位的位置。
static int numberOfLeadingZeros(int i) 在指定 int 值的二進位制補碼錶示形式中最高位(最左邊)的 1 位之前,返回零位的數量。
static int numberOfTrailingZeros(int i) 返回指定的 int 值的二進位制補碼錶示形式中最低(“最右”)的為 1 的位後面的零位個數。
static int parseInt(String s) 將字串引數作為有符號的十進位制整數進行分析。
static int parseInt(String s, int radix) 使用第二個引數指定的基數,將字串引數解析為有符號的整數。
static int reverse(int i) 返回通過反轉指定 int 值的二進位制補碼錶示形式中位的順序而獲得的值。
static int reverseBytes(int i) 返回通過反轉指定 int 值的二進位制補碼錶示形式中位元組的順序而獲得的值。
static int rotateLeft(int i, int distance) 返回根據指定的位數迴圈左移指定的 int 值的二進位制補碼錶示形式而得到的值。
static int rotateRight(int i, int distance) 返回根據指定的位數迴圈右移指定的 int 值的二進位制補碼錶示形式而得到的值。
short shortValue() 以 short 型別返回該 Integer 的值。
static int signum(int i) 返回指定 int 值的符號函式。
static String toBinaryString(int i) 以二進位制(基數 2)無符號整數形式返回一個整數引數的字串表示形式。
static String toHexString(int i) 以十六進位制的無符號整數形式返回一個整數引數的字串表示形式。
static String toOctalString(int i) 以八進位制(基數 8)無符號整數形式返回一個整數引數的字串表示形式。
String toString() 返回一個表示該 Integer 值的 String 物件。
static String toString(int i) 返回一個表示指定整數的 String 物件。
static String toString(int i, int radix) 用第二個引數指定的基數返回第一個引數的字串表示形式。
static Integer valueOf(int i) 返回一個表示指定的 int 值的 Integer 例項。
static Integer valueOf(String s) 返回保持指定的 String 的值的 Integer 物件。
static Integer valueOf(String s, int radix) 返回一個 Integer 物件,該物件中保持了用第二個引數提供的基數進行分析時從指定的 String 中提取的值。
  • 注:如文中有錯誤及不合理的地方,歡迎指出!