1.2 資料型別

王二啵啵發表於2020-12-04

資料型別

Java是強型別語言:要求變數使用要嚴格符合規定,所有變數都必須先定義後才能使用

資料型別分為兩類:

  • 基本型別(primitive type)

    基本資料型別
    數值型
    整數型別
    byte
    short
    int
    long
    浮點型別
    float
    double
    字元型
    char
    boolean型別
    true of false
//整數
int num1=10; //最常用
byte num2=20;
short num3=30;
long num4=40L;//Long型別要在數字後+“L”
//浮點數
float num5=50.2F;//float型別/要在數字後+"F"(同上,它們總是事很多,喜歡帶隨從)
double num6=60.06;
//字元型別
char name ='A';//只能是單個字元,不要話多
//字串
String nameA ="王二";//String 沒變黃,它不是關鍵字,是類
System.out.println("num1 = " + num1);
//布林值:是非
boolean flag=true;//注意true容易寫錯,讀出來”ch-u-true" 處 not"t-u-ture" 兔兒
boolean flag=false;
  • 引用型別(Reference type)

    除了基本的,就是這個不基本的資料型別(doge)

    引用資料型別
    介面
    陣列

型別轉換:

java是強型別語言,所以要進行有些運算就需要用到型別轉換。

byte,short,char
int
long
float
double

運算中,不同型別先轉化為同一型別,再進行運算。

強制轉換(高–低)

(type)變數名

		int i11 = 128;
        byte b2 = (byte) i11;//記憶體溢位 max=127
        System.out.println(i11);
        System.out.println(b2);
//結果輸出
128
-128

轉換中要注意記憶體溢位情況

自動轉換(低–高)

		int i11 = 128;
        double b2 = i11;
        System.out.println(i11);
        System.out.println(b2);
//結果輸出
128
128.0

!注意

  • 不能對布林值進行轉換

  • 不能把物件型別轉換成不相干的型別

  • 在把大容量轉換成小容量時,強制轉換

  • 轉換時可能存在記憶體溢位或者精度問題

    		System.out.println(23.7);
            System.out.println((int)23.7);
            System.out.println((int)-45.89f);
    		char c123='a';
            int d123=c123+1;
            System.out.println(d123);
    		System.out.printIn((char)d123)
    //結果輸出
    23.7
    23
    -45
    98
    b
    
  • 操作比較大的數時,千萬注意溢位問題!

    	int money=100000000;
        int money1=10_0000_0000;//JDK7新特性,數字間可用下劃線分割
    	float money1=10_0000_0000L;//!L和F儘量大寫,要不和1和l眼瞎看不清
    	System.out.println(money);
        System.out.println(money1);
    	int years=20;
        int total=money*years;
    	long tatal1=money*years; //沒用的!,預設是int,早在轉換前已經存在問題了
    	System.out.printIn(tatal);
        System.out.println(total1);
    //結果輸出
    1000000000
    1000000000 //下劃線在輸出時不顯示
    -1474836480 //計算時溢位了 ,我錢沒了! 
    -1474836480 
        long total2=money*((long)years);//先把一個數轉化為long
        System.out.printIn(total2);
    //結果輸出
    20000000000 //yeah,我是小螃蟹,我有鉗了
    	
    

彩蛋:

什麼是位元組?

  • 位(bit):計算機內部資料儲存的最小單位,11001100是一個八位二進位制數。電腦的32位和64位

  • 位元組(byte):計算機中資料處理的基本單位,習慣用大寫B表示。

    1B = 8 bits

    1024B=1KB

    1024KB=1M

    1024M=1G

  • 字元:計算機中使用的字母,數字,字和符號。

資料型別擴充套件

整數進位制:

  • 二進位制0b

  • 十進位制

  • 八進位制0

  • 十六進位制0x

    		int i =10;
            int i2=010;//八進位制
            int i3=0x11;//16進位制
            System.out.println("i = " + i);
            System.out.println("i2 = " + i2);
            System.out.println("i3 = " + i3);	
    
    //結果輸出
    i=10
    i2=8
    i3=17
    

浮點數:

浮點數表現位元組長度是有限而切值是離散的,存在舍入誤差,是一個大約值接近但不等於

最好完全避免使用浮點數進行比較!

***銀行業務怎麼表示?(面試題)***——用BigDecimal類

		float f=0.1f;//0.1沒錯,記得加f
        double d=1.0/10;//0.1
        System.out.println(f==d);
        System.out.println(f);
        System.out.println(d);
        float d1=1223454554f;
        float d2=d1+1;
        System.out.println(d1==d2);
//結果輸出
false  //?就離譜
0.1
0.1
true  //?就離譜

字元:

所有的字元本質還是數字?

		char c1='a';
        char c2='中';
        System.out.println("c1= " +c1);
        System.out.println((int)c1);
        System.out.println("c2= "+c2);
        System.out.println((int)c2);
//結果輸出
c1= a
97
c2=20013

Unicode表:(97=a ,65=A) (0~65536)兩位元組 U0000~UFFFF

		char c3='\u0061';
        System.out.println(c3);
//結果輸出
a
轉義字元:
// \t 製表符
// \n 換行
// ......
 System.out.println("hello\tworld");
 System.out.println("hello\nworld");
//結果輸出
hello	world
hello
world

物件與記憶體分析(later)

String sa=new String("hello,world!");
        String sb=new String("hello,world!");
        System.out.println(sa==sb);
        String sc="hello,world!";
        String sd="hello,world!";
        System.out.println(sc==sd);
//結果輸出
false
true

布林值:

boolean flag1=true;
if(flag1==true){} //萌新
        if(flag1){} //老油條專用“Less is more"
//這三行功能相同

boolean 可以用if語句替代

相關文章