天天看點

Java入門系列-05-資料類型和類型轉換資料類型資料類型轉換試一試

這篇文章為你搞懂2個問題

  1. java 中有哪些資料類型可以用存儲資料?
  2. java 中的資料類型是怎麼轉換的?

在上一篇文章中我們學會了如何使用變量,像這樣存儲一個整數

int age=10;

,可以在開發工具中編寫一行這樣的代碼

int age=10.5;

就會發現開發工具報錯了,是因為變量中的資料類型也是不能随便用的。

資料類型

咱們先來看下面一組資料

如果每天花費2小時在交通上

1月=60小時=2.5天,

1年=730小時=30天,

50年=36500小時=1520天=4年

這段資料中可以分為以下2類,java中也包含這2大類

  1. 數值

    1月

    中的

    1

    60小時

    60

    2.5

    天中

    2.5

  2. 非數值

    ,

    小時

    • 整型
    • byte
    • short
    • int
    • long
    • 浮點型
    • float
    • double
    • char
    • boolean
    • String

      數值型

      下面看一下每個資料類型的詳細介紹
大小 取值範圍 介紹
1位元組8位 -128 ~ +127 位元組型 這個範圍可以存儲普通人的年齡
2位元組16位 -32768~+3276 短整型
4位元組32位 -2147483648)~+2147483647 整型 存下中國人口的數量沒有問題,但是存下地球所有人的數量就不夠了
8位元組64位 -2^63 ~ + 2^63-1 長整型 存下地球的人數綽綽有餘
單精度浮點數 存儲小數
雙精度浮點數

敲一敲:

public class DemoType {
    public static void main(String[] args) {
        //int類型使用
        int numa=10+1;
        System.out.println(numa);//輸出11
        short numb=20;
        //使用long類型時的值需要使用L作為字尾
        long time=9223372036854775807L;
    }
}           

在使用 long 類型時使用不區分大小寫的 L 作為字尾标記與整型進行區分

使用其他整數時不需加字尾符号,注意指派的整數不超過類型範圍即可

public class DemoFloat {
    public static void main(String[] args) {
        float money=33.6f;
        double length=55.07;
    }
}           
在使用單精度浮點數時需加上

f

作為字尾,這是因為任何小數都會被認為是

double

在日常使用中建議使用

double

類型防止精度的丢失

非數值型

字元型 char

隻能存儲一個字元,值需要用一對單引号引起來,且單引号中隻能放一個字元

char sex='男';           

字元串型 String

用于存儲一串字元,必須用一對雙引号引起來,另外需要注意的是 String 不是基本資料類型,而是 java 中的另一個概念

String username="極客大全";
String question="What's your name?\nHow old are you?";           
  1. String

    類型用于存儲字元串,字元串可以拼接但不能用于數學運算
  2. 還可以使用一些

    轉義字元

    ,這些字元可以用來表示一些特殊符号像 空格、換行

    \n

    可以用來表示換行,之後的内容會另起一行

    \t

    可以表示一個制表符(

    Tab

    鍵)

布爾型 boolean

用于存儲邏輯的結果,如:大象比人大的結果是真(

true

) 人比螞蟻小的結果是假(

false

)

boolean isbig=(1>10);
System.out.println("isbig:"+isbig);
boolean isequal=(100==3);
System.out.println("isequal:"+isbig);
boolean flag=false;
System.out.println("flag:"+flag);           

boolean

類型的變量隻能存儲兩個值

true

false

還可以将邏輯比較後的結果(也是

true

false

)存入

資料類型轉換

隐式類型轉換

二花一個月前稱的體重為97.5斤,現在比一個月前剛好增加2斤,二花現在是多少斤?這是一個比較簡單的數學問題,正确結果是 99.5 斤,下面我們用代碼來模拟一遍。

public class DemoClac {
    public static void main(String[] args) {
        double weight=97.5;//一個月前的體重
        int add=2;//增加的體重
        double sum=weight+add;
        System.out.println(sum);//輸出和
    }
}           

add 變量是一個整數類型,而 weight 是一個小數,兩者在相加後轉成了 double類型

這時發生的就是

隐式類型轉換

隐式類型轉換

就是自動類型轉換,滿足以下兩個規則即可發生

  1. 如果一個操作數為double類型,則整個表達式可提升為double類型

像上面的這個示例就是滿足這個規則

  1. 滿足自動類型轉換的條件:兩種類型要相容、目标類型大于源類型

例子1 :

double a=1;

1屬于整型,double 類型大于整型,即自動轉換

例子2 :

char chr=97;
System.out.println(chr);//輸出字元 a           

char 類型相容 int 類型,每個整數存入char類型變量時都會映射一個字元,更多可以百度

ASCII

強制類型轉換

int sum=55.3+22;
System.out.println(sum);           

我們想要一個整數的和,但上面的這段代碼運作時會報錯:

cannot convert from double to int

這是為什麼呢?根據前面學到的隐式類型轉換,當表達式中有操作數為 double類型時,整個表達式提升為 double,必須進行顯式強制類型轉換。

int sum=(int) (55.3+22);
System.out.println(sum);           

這次的運作成功,運作的結果為

77

強制類型轉換往往是從寬度大的類型轉換為寬度小的類型,會使數值損失精度

試一試

  1. 下面運算的結果是多少?為什麼?
int a=5;
int b=2;
int c=a/5;
System.out.println(c);           
  1. 上一個練習中的代碼如何讓運算結果更精準?
  2. 下面素材中生成随機小數,修改素材生成 1-10 的随機整數
    public class DemoRandom {
    public static void main(String[] args) {
        double random=Math.random();
        System.out.println(random);
    }
    }           
    搜尋關注公衆号「享智同行」,第一時間擷取技術幹貨