1. 程式人生 > >Java資料型別以及變數的定義 Java的基本資料型別

Java資料型別以及變數的定義 Java的基本資料型別

1130136248  

Java的基本資料型別

變數就是申請記憶體來儲存值。也就是說,當建立變數的時候,需要在記憶體中申請空間。

記憶體管理系統根據變數的型別為變數分配儲存空間,分配的空間只能用來儲存該型別資料。

因此,通過定義不同型別的變數,可以在記憶體中儲存整數、小數或者字元。

Java的兩大資料型別:

  • 內建資料型別
  • 引用資料型別

內建資料型別

Java語言提供了八種基本型別。六種數字型別(四個整數型(預設是int 型),兩個浮點型(預設是double 型)),一種字元型別,還有一種布林型。

byte:

  • byte資料型別是8位、有符號的,以二進位制補碼錶示的整數;(256個數字),佔1位元組
  • 最小值是-128(-2^7);
  • 最大值是127(2^7-1);
  • 預設值是0;
  • byte型別用在大型陣列中節約空間,主要代替整數,因為byte變數佔用的空間只有int型別的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:

  • short資料型別是16位、有符號的以二進位制補碼錶示的整數,佔2位元組
  • 最小值是-32768(-2^15);
  • 最大值是32767(2^15 - 1);
  • Short資料型別也可以像byte那樣節省空間。一個short變數是int型變數所佔空間的二分之一;
  • 預設值是0;
  • 例子:short s = 1000,short r = -20000。

int:

  • int資料型別是32位、有符號的以二進位制補碼錶示的整數;佔3位元組
  • 最小值是-2,147,483,648(-2^31);
  • 最大值是2,147,485,647(2^31 - 1);
  • 一般地整型變數預設為int型別;
  • 預設值是0;
  • 例子:int a = 100000, int b = -200000。

long:

  • long資料型別是64位、有符號的以二進位制補碼錶示的整數;佔4位元組
  • 最小值是-9,223,372,036,854,775,808(-2^63);
  • 最大值是9,223,372,036,854,775,807(2^63 -1);
  • 這種型別主要使用在需要比較大整數的系統上;
  • 預設值是0L;
  • 例子: long a = 100000L,int b = -200000L。

long a=111111111111111111111111(錯誤,整數型變數預設是int型)

long a=111111111111111111111111L(正確,強制轉換)

float:

  • float資料型別是單精度、32位、符合IEEE 754標準的浮點數;佔4位元組    -3.4*E38- 3.4*E38。。。浮點數是有舍入誤差的
  • float在儲存大型浮點陣列的時候可節省記憶體空間;
  • 預設值是0.0f;
  • 浮點數不能用來表示精確的值,如貨幣;
  • 例子:float f1 = 234.5f。
  • float f=6.26(錯誤  浮點數預設型別是double型別)
  • float f=6.26F(轉換正確,強制)
  • double d=4.55(正確)

double:

  • double資料型別是雙精度、64位、符合IEEE 754標準的浮點數;
  • 浮點數的預設型別為double型別;
  • double型別同樣不能表示精確的值,如貨幣;
  • 預設值是0.0d;
  • 例子:double d1 = 123.4。

boolean:

  • boolean資料型別表示一位的資訊;
  • 只有兩個取值:true和false;
  • 這種型別只作為一種標誌來記錄true/false情況;
  • 預設值是false;
  • 例子:boolean one = true。

char:

  • char型別是一個單一的16位Unicode字元;用 ‘’表示一個字元。。java 內部使用Unicode字符集。。他有一些轉義字元  ,2位元組
  • 最小值是’\u0000’(即為0);
  • 最大值是’\uffff’(即為65,535);可以當整數來用,它的每一個字元都對應一個數字
  • package com.bjsxt.basic;

    public class TestChar {

    public static void main(String[] args) {
    // TODO 自動生成的方法存根
    char c1 = 'a';
    char c2 = '上';
    System.out.println(c1);
    System.out.println(c2);
    System.out.println(c1 + c2);
    }

    }

  • 輸出是:

    a

    20075

  • char資料型別可以儲存任何字元;
  • 例子:char letter = ‘A’。

char 型別可以參與整型計算嗎,然後轉換成字元型

package com.bjsxt.basic;

public class TestChar {

public static void main(String[] args) {
// TODO 自動生成的方法存根
char c1 = 'a';
char c2 = '上';
System.out.println(c1);
System.out.println(c2);
System.out.println(c1 + c2);
int i=c1 + c2;
char dd=(char) (i);
System.out.println(dd);
}

}

 

 

輸出

 

 

a

20075

例項

對於數值型別的基本型別的取值範圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中了。請看下面的例子:

public class PrimitiveTypeTest { public static void main(String[] args) { // byte  System.out.println("基本型別:byte 二進位制位數:" + Byte.SIZE); System.out.println("包裝類:java.lang.Byte"); System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short  System.out.println("基本型別:short 二進位制位數:" + Short.SIZE); System.out.println("包裝類:java.lang.Short"); System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int  System.out.println("基本型別:int 二進位制位數:" + Integer.SIZE); System.out.println("包裝類:java.lang.Integer"); System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("基本型別:long 二進位制位數:" + Long.SIZE); System.out.println("包裝類:java.lang.Long"); System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("基本型別:float 二進位制位數:" + Float.SIZE); System.out.println("包裝類:java.lang.Float"); System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("基本型別:double 二進位制位數:" + Double.SIZE); System.out.println("包裝類:java.lang.Double"); System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("基本型別:char 二進位制位數:" + Character.SIZE); System.out.println("包裝類:java.lang.Character"); // 以數值形式而不是字元形式將Character.MIN_VALUE輸出到控制檯 System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); // 以數值形式而不是字元形式將Character.MAX_VALUE輸出到控制檯 System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } } 

編譯以上程式碼輸出結果如下所示:

基本型別:byte 二進位制位數:8 包裝類:java.lang.Byte 最小值:Byte.MIN_VALUE=-128 最大值:Byte.MAX_VALUE=127 基本型別:short 二進位制位數:16 包裝類:java.lang.Short 最小值:Short.MIN_VALUE=-32768 最大值:Short.MAX_VALUE=32767 基本型別:int 二進位制位數:32 包裝類:java.lang.Integer 最小值:Integer.MIN_VALUE=-2147483648 最大值:Integer.MAX_VALUE=2147483647 基本型別:long 二進位制位數:64 包裝類:java.lang.Long 最小值:Long.MIN_VALUE=-9223372036854775808 最大值:Long.MAX_VALUE=9223372036854775807 基本型別:float 二進位制位數:32 包裝類:java.lang.Float 最小值:Float.MIN_VALUE=1.4E-45 最大值:Float.MAX_VALUE=3.4028235E38 基本型別:double 二進位制位數:64 包裝類:java.lang.Double 最小值:Double.MIN_VALUE=4.9E-324 最大值:Double.MAX_VALUE=1.7976931348623157E308 基本型別:char 二進位制位數:16 包裝類:java.lang.Character 最小值:Character.MIN_VALUE=0 最大值:Character.MAX_VALUE=65535

Float和Double的最小值和最大值都是以科學記數法的形式輸出的,結尾的"E+數字"表示E之前的數字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

實際上,JAVA中還存在另外一種基本型別void,它也有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作。


引用型別

  • 引用型別變數由類的建構函式建立,可以使用它們訪問所引用的物件。這些變數在宣告時被指定為一個特定的型別,比如Employee、Pubby等。變數一旦聲明後,型別就不能被改變了。
  • 物件、陣列都是引用資料型別。
  • 所有引用型別的預設值都是null。
  • 一個引用變數可以用來引用與任何與之相容的型別。
  • 例子:Animal animal = new Animal(“giraffe”)。

Java常量

常量就是一個固定值。它們不需要計算,直接代表相應的值。

常量指不能改變的量。 在Java中用final標誌,宣告方式和變數類似:

final double PI = 3.1415927;

雖然常量名也可以用小寫,但為了便於識別,通常使用大寫字母表示常量。

字面量可以賦給任何內建型別的變數。例如:

byte a = 68; char a = 'A'

byte、int、long、和short都可以用十進位制、16進位制以及8進位制的方式來表示。

當使用常量的時候,字首0表示8進位制,而字首0x代表16進位制。例如:

int decimal = 100; int octal = 0144; int hexa = 0x64;

和其他語言一樣,Java的字串常量也是包含在兩個引號之間的字元序列。下面是字串型字面量的例子:

"Hello World"
"two\nlines"
"\"This is in quotes\""

字串常量和字元常量都可以包含任何Unicode字元。例如:

char a = '\u0001'; String a = "\u0001";

Java語言支援一些特殊的轉義字元序列。

符號 字元含義
\n 換行 (0x0a)
\r 回車 (0x0d)
\f 換頁符(0x0c)
\b 退格 (0x08)
\s 空格 (0x20)
\t 製表符
\" 雙引號
\' 單引號
\\ 反斜槓
\ddd 八進位制字元 (ddd)
\uxxxx 16進位制Unicode字元 (xxxx)

 

這一節講解了Java的基本資料型別。下一節將探討不同的變數型別以及它們的用法。

變數就是申請記憶體來儲存值。也就是說,當建立變數的時候,需要在記憶體中申請空間。

記憶體管理系統根據變數的型別為變數分配儲存空間,分配的空間只能用來儲存該型別資料。

因此,通過定義不同型別的變數,可以在記憶體中儲存整數、小數或者字元。

Java的兩大資料型別:

  • 內建資料型別
  • 引用資料型別

內建資料型別

Java語言提供了八種基本型別。六種數字型別(四個整數型(預設是int 型),兩個浮點型(預設是double 型)),一種字元型別,還有一種布林型。

byte:

  • byte資料型別是8位、有符號的,以二進位制補碼錶示的整數;(256個數字),佔1位元組
  • 最小值是-128(-2^7);
  • 最大值是127(2^7-1);
  • 預設值是0;
  • byte型別用在大型陣列中節約空間,主要代替整數,因為byte變數佔用的空間只有int型別的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:

  • short資料型別是16位、有符號的以二進位制補碼錶示的整數,佔2位元組
  • 最小值是-32768(-2^15);
  • 最大值是32767(2^15 - 1);
  • Short資料型別也可以像byte那樣節省空間。一個short變數是int型變數所佔空間的二分之一;
  • 預設值是0;
  • 例子:short s = 1000,short r = -20000。

int:

  • int資料型別是32位、有符號的以二進位制補碼錶示的整數;佔3位元組
  • 最小值是-2,147,483,648(-2^31);
  • 最大值是2,147,485,647(2^31 - 1);
  • 一般地整型變數預設為int型別;
  • 預設值是0;
  • 例子:int a = 100000, int b = -200000。

long:

  • long資料型別是64位、有符號的以二進位制補碼錶示的整數;佔4位元組
  • 最小值是-9,223,372,036,854,775,808(-2^63);
  • 最大值是9,223,372,036,854,775,807(2^63 -1);
  • 這種型別主要使用在需要比較大整數的系統上;
  • 預設值是0L;
  • 例子: long a = 100000L,int b = -200000L。

long a=111111111111111111111111(錯誤,整數型變數預設是int型)

long a=111111111111111111111111L(正確,強制轉換)

float:

  • float資料型別是單精度、32位、符合IEEE 754標準的浮點數;佔4位元組    -3.4*E38- 3.4*E38。。。浮點數是有舍入誤差的
  • float在儲存大型浮點陣列的時候可節省記憶體空間;
  • 預設值是0.0f;
  • 浮點數不能用來表示精確的值,如貨幣;
  • 例子:float f1 = 234.5f。
  • float f=6.26(錯誤  浮點數預設型別是double型別)
  • float f=6.26F(轉換正確,強制)
  • double d=4.55(正確)

double:

  • double資料型別是雙精度、64位、符合IEEE 754標準的浮點數;
  • 浮點數的預設型別為double型別;
  • double型別同樣不能表示精確的值,如貨幣;
  • 預設值是0.0d;
  • 例子:double d1 = 123.4。

boolean:

  • boolean資料型別表示一位的資訊;
  • 只有兩個取值:true和false;
  • 這種型別只作為一種標誌來記錄true/false情況;
  • 預設值是false;
  • 例子:boolean one = true。

char:

  • char型別是一個單一的16位Unicode字元;用 ‘’表示一個字元。。java 內部使用Unicode字符集。。他有一些轉義字元  ,2位元組
  • 最小值是’\u0000’(即為0);
  • 最大值是’\uffff’(即為65,535);可以當整數來用,它的每一個字元都對應一個數字
  • package com.bjsxt.basic;

    public class TestChar {

    public static void main(String[] args) {
    // TODO 自動生成的方法存根
    char c1 = 'a';
    char c2 = '上';
    System.out.println(c1);
    System.out.println(c2);
    System.out.println(c1 + c2);
    }

    }

  • 輸出是:

    a

    20075

  • char資料型別可以儲存任何字元;
  • 例子:char letter = ‘A’。

char 型別可以參與整型計算嗎,然後轉換成字元型

package com.bjsxt.basic;

public class TestChar {

public static void main(String[] args) {
// TODO 自動生成的方法存根
char c1 = 'a';
char c2 = '上';
System.out.println(c1);
System.out.println(c2);
System.out.println(c1 + c2);
int i=c1 + c2;
char dd=(char) (i);
System.out.println(dd);
}

}

 

 

輸出

 

 

a

20075

例項

對於數值型別的基本型別的取值範圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中了。請看下面的例子:

public class PrimitiveTypeTest { public static void main(String[] args) { // byte  System.out.println("基本型別:byte 二進位制位數:" + Byte.SIZE); System.out.println("包裝類:java.lang.Byte"); System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short  System.out.println("基本型別:short 二進位制位數:" + Short.SIZE); System.out.println("包裝類:java.lang.Short"); System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int  System.out.println("基本型別:int 二進位制位數:" + Integer.SIZE); System.out.println("包裝類:java.lang.Integer"); System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("基本型別:long 二進位制位數:" + Long.SIZE); System.out.println("包裝類:java.lang.Long"); System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("基本型別:float 二進位制位數:" + Float.SIZE); System.out.println("包裝類:java.lang.Float"); System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("基本型別:double 二進位制位數:" + Double.SIZE); System.out.println("包裝類:java.lang.Double"); System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("基本型別:char 二進位制位數:" + Character.SIZE); System.out.println("包裝類:java.lang.Character"); // 以數值形式而不是字元形式將Character.MIN_VALUE輸出到控制檯 System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); // 以數值形式而不是字元形式將Character.MAX_VALUE輸出到控制檯 System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } } 

編譯以上程式碼輸出結果如下所示:

基本型別:byte 二進位制位數:8 包裝類:java.lang.Byte 最小值:Byte.MIN_VALUE=-128 最大值:Byte.MAX_VALUE=127 基本型別:short 二進位制位數:16 包裝類:java.lang.Short 最小值:Short.MIN_VALUE=-32768 最大值:Short.MAX_VALUE=32767 基本型別:int 二進位制位數:32 包裝類:java.lang.Integer 最小值:Integer.MIN_VALUE=-2147483648 最大值:Integer.MAX_VALUE=2147483647 基本型別:long 二進位制位數:64 包裝類:java.lang.Long 最小值:Long.MIN_VALUE=-9223372036854775808 最大值:Long.MAX_VALUE=9223372036854775807 基本型別:float 二進位制位數:32 包裝類:java.lang.Float 最小值:Float.MIN_VALUE=1.4E-45 最大值:Float.MAX_VALUE=3.4028235E38 基本型別:double 二進位制位數:64 包裝類:java.lang.Double 最小值:Double.MIN_VALUE=4.9E-324 最大值:Double.MAX_VALUE=1.7976931348623157E308 基本型別:char 二進位制位數:16 包裝類:java.lang.Character 最小值:Character.MIN_VALUE=0 最大值:Character.MAX_VALUE=65535

Float和Double的最小值和最大值都是以科學記數法的形式輸出的,結尾的"E+數字"表示E之前的數字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

實際上,JAVA中還存在另外一種基本型別void,它也有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作。


引用型別

  • 引用型別變數由類的建構函式建立,可以使用它們訪問所引用的物件。這些變數在宣告時被指定為一個特定的型別,比如Employee、Pubby等。變數一旦聲明後,型別就不能被改變了。
  • 物件、陣列都是引用資料型別。
  • 所有引用型別的預設值都是null。
  • 一個引用變數可以用來引用與任何與之相容的型別。
  • 例子:Animal animal = new Animal(“giraffe”)。

Java常量

常量就是一個固定值。它們不需要計算,直接代表相應的值。

常量指不能改變的量。 在Java中用final標誌,宣告方式和變數類似:

final double PI = 3.1415927;

雖然常量名也可以用小寫,但為了便於識別,通常使用大寫字母表示常量。

字面量可以賦給任何內建型別的變數。例如:

byte a = 68; char a = 'A'

byte、int、long、和short都可以用十進位制、16進位制以及8進位制的方式來表示。

當使用常量的時候,字首0表示8進位制,而字首0x代表16進位制。例如:

int decimal = 100; int octal = 0144; int hexa = 0x64;

和其他語言一樣,Java的字串常量也是包含在兩個引號之間的字元序列。下面是字串型字面量的例子:

"Hello World"
"two\nlines"
"\"This is in quotes\""

字串常量和字元常量都可以包含任何Unicode字元。例如:

char a = '\u0001'; String a = "\u0001";

Java語言支援一些特殊的轉義字元序列。

符號 字元含義
\n 換行 (0x0a)
\r 回車 (0x0d)
\f 換頁符(0x0c)
\b 退格 (0x08)
\s 空格 (0x20)
\t 製表符
\" 雙引號
\' 單引號
\\ 反斜槓
\ddd 八進位制字元 (ddd)
\uxxxx 16進位制Unicode字元 (xxxx)

 

這一節講解了Java的基本資料型別。下一節將探討不同的變數型別以及它們的用法。