溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java數據類型的示例分析

發(fā)布時間:2022-02-28 10:49:44 來源:億速云 閱讀:108 作者:小新 欄目:開發(fā)技術

小編給大家分享一下Java數據類型的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    一、基本數據類型

    1.1 整形

    1.1.1 int
    int a = Integer.MAX_VALUE;//int最大值
    int b = Integer.MIN_VALUE;//int最小值

    在java中int占4個字節(jié),和操作系統每任何關系。這也是java的可移植性。

    int 能表示的范圍為-231~231-1,如果超出最大值或者小于最小值則會發(fā)生溢出。

    public static void main(String[] args) {
                int a = Integer.MAX_VALUE;//int最大值
                int b = Integer.MIN_VALUE;//int最小值
                System.out.println("MAX_VALUE="+a);
                System.out.println("MIN_VALUE="+b);
                a = a+1;
                b = b-1;
                System.out.println("---------------");
                System.out.println("MAX_VALUE+1="+a);
                System.out.println("MIN_VALUE-1="+b);
    }

    Java數據類型的示例分析

    我們發(fā)現int的最大值加1會等于int的最小值,而int的最小值減1會等于int的最大值。這種情況不僅在int,在long和short都存在

    Java數據類型的示例分析

    1.1.2 長整形:long

    long占8個字節(jié),可表示的范圍是 -263~-263-1

    long a = 100L;
    long b = 100l;
    long c = 100;

    在創(chuàng)建長整形變量時,a,b,c三種都可以,當我們一般用第一種,大寫L更好識別它時長整形

    1.1.3 短整形:short

    short占2個字節(jié),所能表示的范圍為-215~215-1
    short能表示的范圍 -32768~32767 ,所表示的范圍比較小一般不推薦使用,所以我們以后 int 和 long 時使用的比較多的。

    1.2 浮點型

    1.2.1 雙精度浮點型:double
    public static void main(String[] args) {
                int a1 = 1;
                int a2 = 2;
                double b1 = 1.0;
                double b2 = 2.0;
                System.out.println("a1/a2="+a1/a2);
                System.out.println("b1/b2="+b1/b2);
    }

    Java數據類型的示例分析

    在java當中int除以 int 只能得到 int 類型,因為小數部分會被舍去。如果要得到小數則需要用浮點數來計算。

    再來看一個有意思的代碼

    public static void main(String[] args) {
                double a = 1.1;
                System.out.println(a*a);
    
    }

    Java數據類型的示例分析

    這里a*a理論上說時等于1.21的但這里為什么不是呢?

    1.Java 中的 double 雖然也是 8 個字節(jié), 但是浮點數的內存布局和整數差別很大, 不能單純的用 2n 的形式表示數據范

    2.Java 的 double 類型的內存布局遵守 IEEE 754 標準(和C語言一樣), 嘗試使用有限的內存空間表示可能無限的小數, 勢
    必會存在一定的精度誤差圍,而且計算機中小數是沒有精確的數字的

    1.2.2 單精度浮點型:float

    flaot占4個字節(jié)

    public static void main(String[] args) {
                float a1 = 1.1;
                float a2 = (float)1.1;
                float b = 1.1F;
                float c = 1.1f;
    }

    Java數據類型的示例分析

    這里為什么報錯呢?因為Java是一個強類型語言,安全性更高。在Java當中小數默認是double類型的,在創(chuàng)建float變量的時候,需要在小數后面加上一個F(f)或者強制類型轉換。

    不過float能表示的精度較小,所以我們一般都是用double

    1.3 字符類型變量char

    在java中char不同于C語言它是占兩個字節(jié)的,計算機中的字符本質上是一個整數. 在 C 語言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一個字符占用兩個字節(jié), 表示的字符種類更多, 包括中文.

    public static void main(String[] args) {
                char a = 97;
                char b = 65;
                char c = '好';
                System.out.println(a);
                System.out.println(b);
                System.out.println(c);
    }

    Java數據類型的示例分析

    在Java當中字符類型就是字符類型不要和數字掛鉤,記住java中字符類型是不能夠給負數的。

    Java數據類型的示例分析

    1.4 字節(jié)類型變量byte

    byte占1個字節(jié),能表示的范圍為 -128~127
    byte不能賦值超過它范圍外的數字,從而可以推到出其它類型也是一樣的。

    來看一段代碼:

    Java數據類型的示例分析

    這里的 b3和b5都報錯,而b4沒有報錯呢?

    1.這是因為執(zhí)行 b3 這段代碼時,b1和b2都是變量編譯器不知道里面是什么,為了安全起見所以報錯。

    2.而b4不報錯時因為在編譯的時候 5+10就已經被替換為15了,相當于 b4 = 15.

    3.那b5報錯又是為什么呢?這里就牽扯到了整形提升,

    簡單說一下整形提升:當變量小于4個字節(jié)的時候,比如這里的byte在計算時會把它先提升為整形int再進行計算。而byte是1個字節(jié)接收不了int類型的變量,所以報錯。后面會再提到整形提升

    1.5 布爾類型變量 boolean

    boolean a = false;
    boolean b = true;

    1.在java中布爾類型只有兩個取值 falsetrue 。

    2.java中的boolean和int 類型不能相互轉換,不存在1表示true ,0表示false這種用法

    3.boolean 類型有些 JVM 的實現是占 1 個字節(jié), 有些是占 1 個比特位。并沒有明確規(guī)定大小

    1.6 字符串類型變量 String

    Java的字符串可以用+進行拼接

    public static void main(String[] args) {
                String str1 = "這是一個字符串";
                String str2 = "java";
                String tmp = str1 + str2;
                System.out.println(tmp);
    }

    Java數據類型的示例分析

    同樣也可以拼接數字

    public static void main(String[] args) {
                String str1 = "這是一個字符串";
                String str2 = "java";
                String tmp = str1 + str2;
                System.out.println(tmp);
                int a = 10;
                int b = 20;
                System.out.println(tmp+a+b);
                System.out.println(a+b+tmp);
    }

    Java數據類型的示例分析

    輸出的時候如果前面是字符串則后面的數字會被當作字符進行拼接,可以根據自己的需要進行運算或者拼接

    1.Java 使用 雙引號 + 若干字符 的方式表示字符串字面值.

    2. 和上面的類型不同, String 不是基本類型, 而是引用類型(在以后的文章會說到).

    二、常量

    上面討論的都是各種規(guī)則的變量, 每種類型的變量也對應著一種相同類型的常量.

    常量指的是運行時類型不能發(fā)生改變.

    常量主要有以下兩種體現形式

    2.1 字面常量

    Java數據類型的示例分析

    2.2 … final 關鍵字修飾的常量

    Java數據類型的示例分析

    final修飾的常量是不能被直接修改的

    三、 類型轉換和數值轉換

    3.1 類型轉換

    java 作為一個強類型編程語言, 當不同類型之間的變量相互賦值的時候, 會有教嚴格的校驗.來看一下列子

    Java數據類型的示例分析

    long 表示的范圍更大, 可以將 int 賦值給 long, 但是不能將 long 賦值給 int.

    double 表示的范圍更大, 可以將 int 賦值給 double, 但是不能將 double 賦值給 int.

    結論: 不同數字類型的變量之間賦值, 表示范圍更小的類型能隱式轉換成范圍較大的類型, 反之則不行.

    3.1.1 強制類型轉換

    Java數據類型的示例分析

    結論: 使用 (類型) 的方式可以將 double 類型強制轉成 int. 但是

    1.強制類型轉換可能會導致精度丟失. 如剛才的例子中, 賦值之后, 20.5 就變成 20 了, 小數點后面的部分被忽略.

    2.強制類型轉換不是一定能成功, 互不相干的類型之間無法強轉

    Java數據類型的示例分析

    比如這個列子 int 和 boolean這兩種完全不相關的類型是不可以強轉的。

    類型轉換小結:

    1. 不同數字類型的變量之間賦值, 表示范圍更小的類型能隱式轉換成范圍較大的類型.
    2. 如果需要把范圍大的類型賦值給范圍小的, 需要強制類型轉換, 但是可能精度丟失.
    3. 將一個字面值常量進行賦值的時候, Java 會自動針對數字范圍進行檢查.

    3.2 數值提升

    Java數據類型的示例分析

    結論: 當 int 和 long 混合運算的時候, int 會提升成 long, 得到的結果仍然是 long 類型, 需要使用 long 類型的變量來
    接收結果. 如果非要用 int 來接收結果, 就需要使用強制類型轉換.

    再來看一個例子,前面在byte類型的時候就已經說到了,這里再詳細說一下。

    Java數據類型的示例分析

    結論: byte 和 byte 都是相同類型, 但是出現編譯報錯. 原因是, 雖然 a 和 b 都是 byte, 但是計算 a + b 會先將 a 和 b 都提升成 int, 再進行計算, 得到的結果也是 int, 這時賦給 c, 就會出現上述錯誤。

    由于計算機的 CPU 通常是按照 4 個字節(jié)為單位從內存中讀寫數據. 為了硬件上實現方便, 諸如 byte 和 short 這種低于4 個字節(jié)的類型, 會先提升成 int, 再參與計算。
    簡單來說類型提升就是為了加快cpu運算速度

    如果非要這樣計算,則需要強轉。

    類型提升小結:

    1.不同類型的數據混合運算, 范圍小的會提升成范圍大的.

    2.對于 short, byte 這種比 4 個字節(jié)小的類型, 會先提升成 4 個字節(jié)的 int , 再運算.

    四、 int 和 String 之間的相互轉換

    4.1 int轉String

    public static void main(String[] args) {
                int a = 10;
                //方法1
                String str1 = 10+" ";
                //方法2
                String str2 = String.valueOf(a);
    }

    4.2 String轉int

    public static void main(String[] args) {
                String str = "123456";
                int b = Integer.valueOf(str);
                int c = Integer.parseInt(str);
    }

    以上是“Java數據類型的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI