日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java char 空_2020重新出发,JAVA入门,数据类型

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java char 空_2020重新出发,JAVA入门,数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據類型

通過上一節,明白了變量就是申請內存來存儲值,即當創建變量的時候,需要在內存中申請空間。

內存管理系統根據變量的類型為變量分配存儲空間,確定了變量的類型,即確定了數據需分配內存空間的大小,數據在內存的存儲方式。

Java 是一種強制類型的語言,所有的變量都必須先明確定義其數據類型,然后才能使用。

Java 中所有的變量、表達式和值都必須有自己的類型,沒有“無類型”變量這樣的概念。

Java 語言支持的數據類型分為兩種:內置數據類型/基本數據類型 & 引用數據類型

  • 基本數據類型(primitive type):都是直接存儲在內存中的內存棧上,數據本身的值就是存儲在棧空間;
  • 引用數據類型(reference type):繼承與Object類,引用(即指針)是存儲在有序的內存棧上,而對象本身的值存儲在內存堆中。

基本數據類型

Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。

占用存儲范圍: 1字符 = 2字節(byte)= 16位

對于數值類型的基本類型的取值范圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中了。

請看下面的例子:

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 × 10的3次 =3140,3.14E-3 就是 3.14 x 10的-3次 =0.00314。

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

引用數據類型

引用數據類型建立在基本數據類型的基礎上,包括數組、類和接口。引用數據類型是由用戶自定義,用來限制其他數據的類型。另外,Java 語言中不支持 C++ 中的指針類型、結構類型、聯合類型和枚舉類型。

引用類型還有一種特殊的 null 類型。所謂引用數據類型就是對一個對象的引用,對象包括實例和數組兩種。實際上,引用類型變量就是一個指針,只是 Java 語言里不再使用指針這個說法。

空類型(null type)就是 null 值的類型,這種類型沒有名稱。因為 null 類型沒有名稱,所以不可能聲明一個 null 類型的變量或者轉換到 null 類型。

空引用(null)是 null 類型變量唯一的值。空引用(null)可以轉換為任何引用類型。

在實際開發中,程序員可以忽略 null 類型,假定 null 只是引用類型的一個特殊直接量。

注意:空引用(null)只能被轉換成引用類型,不能轉換成基本類型,因此不要把一個 null 值賦給基本數據類型的變量。

數據類型轉換

數據類型的轉換是在所賦值的數值類型和被變量接收的數據類型不一致時發生的,它需要從一種數據類型轉換成另一種數據類型。

數據類型的轉換可以分為隱式轉換(自動類型轉換)和顯式轉換(強制類型轉換)兩種。

隱式轉換(自動類型轉換)

如果以下 2 個條件都滿足,那么將一種類型的數據賦給另外一種類型變量的時,將執行自動類型轉換(automatic type conversion)。

  • 兩種數據類型彼此兼容
  • 目標類型的取值范圍大于源數據類型(低級類型數據轉換成高級類型數據)

當以上 2 個條件都滿足時,拓寬轉換(widening conversion)發生。

例如 byte 類型向 short 類型轉換時,由于 short 類型的取值范圍較大,會自動將 byte 轉換為 short 類型。

在運算過程中,由于不同的數據類型會轉換成同一種數據類型,所以整型、浮點型以及字符型都可以參與混合運算。自動轉換的規則是從低級類型數據轉換成高級類型數據。轉換規則如下:

  • 數值型數據的轉換:byte→short→int→long→float→double。
  • 字符型轉換為整型:char→int。

以上數據類型的轉換遵循從左到右的轉換順序,最終轉換成表達式中表示范圍最大的變量的數據類型。

例 :顧客到超市購物,購買牙膏 2 盒,面巾紙 4 盒。其膏的價格是 10.9 元,面巾紙的價格是 5.8 元,求商品總價格。實現代碼如下:

public static void main(String[] args) { float price1 = 10.9f; // 定義牙膏的價格 double price2 = 5.8; // 定義面巾紙的價格 int num1 = 2; // 定義牙膏的數量 int num2 = 4; // 定義面巾紙的數量 double res = price1 * num1 + price2 * num2; // 計算總價 System.out.println("一共付給收銀員" + res + "元"); // 輸出總價 }

上述代碼中首先定義了一個 float 類型的變量存儲牙膏的價格,然后定義了一個 double 類型的變量存儲面巾紙的價格,再定義兩個 int 類型的變量存儲物品的數量,最后進行了乘運算以及和運算之后,將結果儲存在一個 double 類型的變量中進行輸出。

程序執行結果

一共付給收銀員44.99999923706055元

從執行結果看出,float、int 和 double 三種數據類型參與運算,最后輸出的結果為 double 類型的數據。

這種轉換一般稱為“表達式中類型的自動提升”。

自動類型提升有好處,但它也會引起令人疑惑的編譯錯誤。

例如,下面看起來正確的程序卻會引起問題:

byte b = 50; b = b * 2; // Type mismatch: cannot convert from int to byte

如上所示,第二行會報“類型不匹配:無法從int轉換為byte”錯誤。

該程序試圖將一個完全合法的 byte 型的值 50*2 再存儲給一個 byte 型的變量。

但是當表達式求值的時候,操作數被自動的提升為 int 型,計算結果也被提升為 int 型。

這樣表達式的結果現在是 int 型,不強制轉換它就不能被賦為 byte 型。

確實如此,在這個特別的情況下,被賦的值將仍然適合目標類型。

所以應該使用一個顯示的強制類型轉換,例如:

byte b = 50; b = (byte)(b*2);

這樣就能產生正確的值 100。

注意:char 類型比較特殊,char 自動轉換成 int、long、float 和 double,但 byte 和 short 不能自動轉換為 char,而且 char 也不能自動轉換為 byte 或 short。

顯式轉換(強制類型轉換)

盡管自動類型轉換是很有幫助的,但并不能滿足所有的編程需要。例如,如果你需要將 double 型的值賦給一個 int 型的變量。

這種轉換不會自動進行,因為 double 型的變化范圍比 int 型的要小。這種轉換有使成為“縮小轉換”,因為肯定要將源數據類型的值變小才能適合目標數據類型。

所以當兩種數據類型不兼容,或目標類型的取值范圍小于源類型時,自動轉換將無法進行,這時就需要進行強制類型轉換。

語法格式如下:

(type)variableName

其中,type 為 variableName 要轉換成的數據類型,而 variableName 是指要進行類型轉換的變量名稱

實例如下:

int a = 3; double b = 5.0; a = (int)b;

上述代碼中首先將 double 類型變量 b 的值強制轉換成 int 類型,然后將值賦給 a,但是變量 b 本身的值是沒有發生變化的。

在強制類型轉換中,如果是將浮點類型的值轉換為整數,直接去掉小數點后邊的所有數字;而如果是整數類型強制轉換為浮點類型時,將在小數點后面補零。

例1:顧客到超市購物,購買牙膏 2 盒,面巾紙 4 盒。其中牙膏的價格是 10.9 元,面巾紙的價格是 5.8 元,求商品總價格,在計算總價時采用 int 類型的數據進行存儲。實現代碼如下:

public static void main(String[] args) { float price1 = 10.9f; double price2 = 5.8; int num1 = 2; int num2 = 4; int res2 = (int) (price1 * num1 + price2 * num2); System.out.println("一共付給收銀員" + res2 + "元"); }

在上述實例中,有 double 類型、float 類型和 int 類型的數據參與運算,其運算結果默認為 double 類型,題目要求的結果為 int 類型,因為 int 類型的取值范圍要小于 double 類型的取值范圍,所以需要進行強制類型轉換。

執行結果

一共付給收銀員44元

總結

以上是生活随笔為你收集整理的java char 空_2020重新出发,JAVA入门,数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。