java資料類型範圍

來源:互聯網
上載者:User

標籤:stat   tcl   getc   之間   層級   說明   資料   a+b   e30   

資料類型範圍測試

一、數字常數的編譯問題

java中的常量數字預設以int型編譯

如:

long a = 1234567890; //十位long b = 12345678900; //預設資料為int型,十一位超int範圍,編譯不過,在eclipse下數字有底線提醒

如果用到的數超過int型,這裡提供一下幾種解決方案

1.整數後面加L或者l

long c = 12345678900L; //加L或者l表示以long編譯

2.寫成浮點數形式(double表示的範圍更廣)

在java中,直接寫整數常數,被預設為int型,整數後面加L可以轉化成long型。

直接寫浮點常數,被預設為double型,整數後面加f可以轉化成float型。

double e = 12345678900.0; //以double形式寫數字常量,編譯可過

二、unsigned int的處理方法

java沒有unsigned int類型,筆者使用了移位的方法表示了無符號整型的最大值

private static final long UNSIGNED_INT_MAX = (1L << 32) - 1;

順便一提,可以用這種方法定義常量字元,代替C語言的宏定義。

 

基礎資料型別 (Elementary Data Type)介紹

基礎資料型別 (Elementary Data Type)主要有這幾個: 
byte、short、int、long、float、double、char、boolean 
可以分為三類:

  1. 數實值型別:byte、short、int、long、float、double
  2. 字元類型:char
  3. 布爾型:boolean
byte
  1. byte是8位的資料類型,佔用1個位元組(8bit),預設值是0,它的取值範圍是(-2^7) ~ (2^7-1),也就是 -128 ~ 127之間,所以最大儲存資料量是255;
  2. byte一般在大型數組中使用,來代替整數,因為byte變數佔用的空間只有int的1/4。
  3. byte使用樣本: byte a = 10,byte=-10。在使用byte資料類型的時候需要注意取值範圍!!!
short
  1. short是16位的資料類型,佔用2個位元組,預設值是0,它的取值範圍是(-2^15) ~(2^15-1),也就是 -32768 ~ 32767之間,所以最大資料存放區量是65536;
  2. short雖然是int型變數所佔空間的1/2,但是在實際中卻很少用到。在大型數組中也可以節省空間的。
  3. short使用樣本:short a=100,short b=-200;
int
  1. int是32位的資料類型,佔用4個位元組,預設值是0,它的取值範圍是(-2^31) ~(2^31-1),也就是 -2147483648 ~ 2147483647之間,所以最大資料存放區量是2^32-1;
  2. int是資料類型是整型,是我們在項目中用到最多的資料類型之一;
  3. int 使用樣本:int a=1000,int b=-2000;
long
  1. long是64位的資料類型,佔用8個位元組,預設值是0L,它的取值範圍是(-2^63) ~(2^63-1),也就是 -9223372036854775808 ~ 9223372036854775808之間,所以最大資料存放區量是2^64;
  2. long是資料類型是長整型,是我們在項目中用到最多的資料類型之一。在使用long類型的資料時最好在數值末尾帶上大寫的L!
  3. long 使用樣本:long a=1000L,long b=-2000L;
float
  1. float是32位的資料類型,佔用4個位元組,預設值是0,它的取值範圍是3.4e-45 ~ 1.4e38 之間;
  2. float是資料類型是單精確度,在直接賦值時必須在數字後加上f或F。
  3. float使用樣本:float a=10.25f, float b=-20.35F;
double
  1. double是64位的資料類型,佔用8個位元組,預設值是0,它的取值範圍是4.9e-324 ~ 1.8e308 之間;
  2. double是資料類型是雙精確度,在直接賦值的時候最好加上D或d。
  3. double使用樣本:double a=10.123d, double b= -10.25644D;
boolean
  1. boolean是布爾類型,佔用1個位元組,只有兩個值,false和true,預設值是 false。
  2. boolean只能用一種標誌來記錄 true或false,一般和 if 結合使用。
  3. boolean使用樣本: boolean a=true,boolean b=false;
char
  1. char是字元類型,佔用2個位元組,預設值為空白,取值範圍 為 0~65535,也就是 \u0000 ~ \uffff。
  2. char資料類型可以儲存任何字元。
  3. char 使用樣本: char a=1,char b=’A’;

數實值型別的層級從低到高分別為: 
byte,char,short(這三個平級)——>int——>float——>long——>double 
其中由低層級轉到進階別,是屬於自動類型轉換,這點是由系統自動轉換的。

例如將int類型的資料轉為float類型的資料。 
樣本:

int i=10;float j=i;System.out.println("i:"+i+",j:"+j);

結果:

i:10,j:10.0

如果由進階別轉為低層級,則需要強制轉換,也就是強制類型轉換。 
例如將int類型的資料轉換為byte類型的資料。 
樣本:

int i=127;int j=128;byte bye=(byte)i;byte bye2=(byte)j;System.out.println("i:"+i+",bye:"+bye);System.out.println("j:"+j+",bye2:"+bye2);

結果:

i:127,bye:127j:128,bye2:-128

說明:因為 byte 類型是 8 位,最大值為127,所以當 int 強制轉換為 byte 類型時,值 128 時候就會導致溢出。所以在進行強制類型轉換的時候,要注意取值範圍!

在強制轉換的時候需要注意資料的精確度,否則可能會出現資料精確丟失。 
例如 double類型的資料轉換為float類型資料。 
樣本:

double d=10.1111115;float f=(float) d;System.out.println("f:"+f+",d:"+d);

結果:

f:10.111112,d:10.1111115

瞭解了資料類型的層級之後,如果用不同的資料類型進行計算,那麼最終的資料類型又是哪一種呢? 
這裡我們用這幾種來測試: 
1.byte 類型的資料 加 short 類型的資料; 
2.short 類型的資料 加 int 類型的資料; 
3.int 類型的資料 加 long 類型的資料;

這裡我們使用這個方法來擷取最終的資料類型

public static String getType(Object o){         return o.getClass().toString();     

代碼:

short a=1;byte b=2;int c = 3;long d = 4;System.out.println(getType(a));System.out.println(getType(b));System.out.println(getType(c));System.out.println(getType(d));System.out.println(getType(a+b));System.out.println(getType(a+c));System.out.println(getType(c+d));

結果:

class java.lang.Shortclass java.lang.Byteclass java.lang.Integerclass java.lang.Longclass java.lang.Integerclass java.lang.Integerclass java.lang.Long

看到結果是不是有點吃驚呢?那麼是為什麼呢? 
這裡的不同的數實值型別資料進行相加的時候,會自動轉換為層級最高的那一個。 
那麼short 類型的資料加 byte 類型的資料為什麼是int類型呢? 
因為在java的世界裡,如果比int類型小的類型做運算,java在編譯的時候就會將它們統一強轉成int類型。 
如果上述不好理解的,那麼這裡我們來做個實驗測試下,通過結果來進行驗證。 
樣本:

short a=1,b=2;byte c=3,d=4;System.out.println(getType(a+b));System.out.println(getType(c+d));

結果:

class java.lang.Integerclass java.lang.Integer

那麼這裡可以得出結論,在數實值型別中,若層級小於int,進行計算的時候,最終的資料類型會自動轉換為int,如果高於int,最終資料結果會取其中最高的一個!

java資料類型範圍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.