java基礎-02數據類型

基本類型

整數

byte

  • byte 數據類型是8位、有符號的,以二進制補碼錶示的整數
  • 最小值是 -128(-2^7)
  • 最大值是 127(2^7-1)
  • 默認值是 0
  • byte 類型用在大型數組中節約空間,主要代替整數,由於 byte 變量佔用的空間只有 int 類型的四分之一
  • 例子:byte a = 100,byte b = -50

short

  • short 數據類型是 16 位、有符號的以二進制補碼錶示的整數
  • 最小值是 -32768(-2^15)
  • 最大值是 32767(2^15 - 1)
  • Short 數據類型也能夠像 byte 那樣節省空間。一個short變量是int型變量所佔空間的二分之一
  • 默認值是 0
  • 例子:short s = 1000,short r = -20000。

int

  • int 數據類型是32位、有符號的以二進制補碼錶示的整數
  • 最小值是 -2,147,483,648(-2^31)
  • 最大值是 2,147,483,647(2^31 - 1)
  • 通常地整型變量默認爲 int 類型
  • 默認值是 0
  • 例子:int a = 100000, int b = -200000

long

  • long 數據類型是 64 位、有符號的以二進制補碼錶示的整數
  • 最小值是 -9,223,372,036,854,775,808(-2^63)
  • 最大值是 9,223,372,036,854,775,807(2^63 -1)
  • 這種類型主要使用在須要比較大整數的系統上
  • 默認值是 0L
  • 例子: long a = 100000L,Long b = -200000L
  • "L"理論上不分大小寫,可是若寫成"l"容易與數字"1"混淆,不容易分辯。因此最好大寫。

小數

float

  • float 數據類型是單精度、32位、符合IEEE 754標準的浮點數
  • float 在儲存大型浮點數組的時候可節省內存空間
  • 默認值是 0.0f
  • 浮點數不能用來表示精確的值,如貨幣(用BigDecimal)
  • 例子:float f1 = 234.5f。

double

  • double 數據類型是雙精度、64 位、符合IEEE 754標準的浮點數
  • 浮點數的默認類型爲double類型
  • double類型一樣不能表示精確的值,如貨幣(用BigDecimal)
  • 默認值是 0.0d
  • 例子:double d1 = 123.4

其它

char

  • char類型是一個單一的 16 位 Unicode 字符,能夠看作無符號整數。
  • 最小值是 \u0000(即爲0)
  • 最大值是 \uffff(即爲65,535 , 2^16 -1)
  • char 數據類型能夠儲存任何字符
  • 例子:char letter = 'A'

boolean

  • boolean數據類型表示1個比特位的信息
  • 只有兩個取值:true 和 false
  • 這種類型只做爲一種標誌來記錄 true/false 狀況
  • 默認值是 false
  • 例子:boolean one = true

引用類型

  • 在Java中,引用類型的變量很是相似於C/C++的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定爲一個特定的類型,好比 Employee、Puppy 等。變量一旦聲明後,類型就不能被改變了。
  • 對象、數組都是引用數據類型。
  • 全部引用類型的默認值都是null。
  • 一個引用變量能夠用來引用任何與之兼容的類型。

字符串

  • String 類是不可改變的,若是須要對字符串作不少修改,那麼應該選擇使用 StringBuffer & StringBuilder 類。
  • 直接賦值初始化,若是常量池(哈希表,key是字符串值,value是對象地址)存在,返回內存地址,不然建立一個新字符串對象,這叫作 字符串駐留,好比String str1 = "ABC"; 這種構造效率高。
  • 使用new 初始化,每次都會建立新字符串對象,String str2 = new String("ABC"); 判斷字符串值是否相等,使用equals
  • string 的hashcode()計算方式
string的哈希計算公式爲 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
取31爲權:主要是由於31是一個奇質數,因此31*i=32*i-i=(i<<5)-i,這種位移與減法結合的計算相比通常的運算快不少。

數組

聲明數組
String [] arrStr = {"aa","bb"}; // 推薦這種聲明方式: 類型[] 變量
String arrStr2[] = {"aa","bb"}; // 類型 變量[] 是c++風格的。

System.out.println(Arrays.toString(arrStr) ); // 輸出數組元素
System.out.println( Arrays.toString(arrStr2));

Arrays工具類:html

Arrays.toString(arrar):返回數組全部元素
Arrays.fill(array, 5):使用5填充全部的數組元素
Arrays.sort(array1):對整個數組排序
Arrays.equals(array, array1):比較數組array和array1的值是否相同
Arrays.binarySearch(array, key):經過二分查找,key是否在array中

爲何獲取數組的長度用 .length (成員變量的形式),而獲取String的長度用 .length() (成員方法的形式)?」
由於數組的長度存在對象頭中,數組自己是沒有length成員變量的。java

類和對象

  • 類:類是一個模板,它描述一類對象的行爲和狀態。
  • 對象:對象是類的一個實例(對象不是找個女友),有狀態和行爲。
  • 一個源文件中只能有一個public類
  • 一個源文件能夠有多個非public類
  • 源文件的名稱應該和public類的類名保持一致。例如:源文件中public類的類名是Employee,那麼源文件應該命名爲Employee.java。
  • 若是一個類定義在某個包中,那麼package語句應該在源文件的首行。
  • 若是源文件包含import語句,那麼應該放在package語句和類定義之間。若是沒有package語句,那麼import語句應該在源文件中最前面。
  • import語句和package語句對源文件中定義的全部類都有效。在同一源文件中,不能給不一樣的類不一樣的包聲明。

枚舉類型

枚舉的定義和使用c++

//定義枚舉類型,使用關鍵字enum
enum Day {
    MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

// 使用枚舉
Day day =Day.MONDAY;

枚舉的實現原理數組

  • 生成一個類Day,該類繼承自Enum
  • 枚舉中的每個實例,成爲類Day的實例
//反編譯Day.class
final class Day extends Enum
{
    //私有構造函數
    private Day(String s, int i)
    {
        super(s, i);
    }
     //前面定義的7種枚舉實例
    public static final Day MONDAY;
    public static final Day TUESDAY;
    public static final Day WEDNESDAY;
    public static final Day THURSDAY;
    public static final Day FRIDAY;
    public static final Day SATURDAY;
    public static final Day SUNDAY;
    private static final Day $VALUES[];

    static 
    {    
        //實例化枚舉實例
        MONDAY = new Day("MONDAY", 0);
        TUESDAY = new Day("TUESDAY", 1);
        WEDNESDAY = new Day("WEDNESDAY", 2);
        THURSDAY = new Day("THURSDAY", 3);
        FRIDAY = new Day("FRIDAY", 4);
        SATURDAY = new Day("SATURDAY", 5);
        SUNDAY = new Day("SUNDAY", 6);
        $VALUES = (new Day[] {
            MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
        });
    }
}

補充

二進制中的原碼、反碼、補碼

對於有符號數而言:性能優化

  • 二進制的最高位是符號位:0表示正數,1表示負數
  • 正數的原碼、反碼、補碼都同樣;函數

  • 負數的反碼 = 它的原碼符號位不變,其餘位取反(0 ->1 ; 1->0 );
  • 負數的補碼 = 它的反碼 +1;工具

  • 0的反碼、補碼都是0;
  • 在計算機運算的時候,都是以補碼的方式來運算的;性能

使用BigDecimal表示金額

咱們可使用BigDecimal來表示金額,或者是經過將金額的單位變小用整數來表示金額。優化

// 建議優先使用String構造方法。不要使用double類型的構造函數,不然仍是會轉爲多精度的小數
BigDecimal ba = new BigDecimal("0.03"); // 直接用string
BigDecimal bb = new BigDecimal(Double.toString(0.02)); // double轉爲string
System.out.printf("%s-%s = %s \n",ba.toString(),bb.toString() , ba.subtract(bb));

參考

相關文章
相關標籤/搜索