Java基礎知識回顧之一 ----- 基本數據類型

来源:https://www.cnblogs.com/xuwujing/archive/2018/03/18/8597557.html
-Advertisement-
Play Games

前言 在開始工作至今,學習各種各樣的技術之中發現自己的很多Java的基礎知識都忘了⊙﹏⊙b汗。。。 而且越是學習越是發現Java基礎的重要性,所以準備單獨抽一下時間進行Java基礎的重新學習。在重新學習的時候,對這些又有了不同的感悟,於是準備將這些都記載下來,並整理成博客,希望能夠幫助那些需要的人。 ...


前言

在開始工作至今,學習各種各樣的技術之中發現自己的很多Java的基礎知識都忘了⊙﹏⊙b汗。。。 而且越是學習越是發現Java基礎的重要性,所以準備單獨抽一下時間進行Java基礎的重新學習。在重新學習的時候,對這些又有了不同的感悟,於是準備將這些都記載下來,並整理成博客,希望能夠幫助那些需要的人。

基本數據類型介紹

基本數據類型主要有這幾個:
byte、short、int、long、float、double、char、boolean
可以分為三類:

  1. 數值類型:byte、short、int、long、float、double
  2. 字元類型:char
  3. 布爾型:boolean

byte

  1. byte是8位的數據類型,占用1個位元組(8bit),預設值是0,它的取值範圍是(-2^7) ~ (2^7-1),也就是 -128 ~ 127之間,所以最大存儲數據量是255;
  2. byte一般在大型數組中使用,來代替整數,因為byte變數占用的空間只有int的1/4。
  3. byte使用示例: byte a = 10,byte=-10。在使用byte數據類型的時候需要註意取值範圍!!!

short

  1. short是16位的數據類型,占用2個位元組,預設值是0,它的取值範圍是(-2^15) ~(2^15-1),也就是 -32768 ~ 32767之間,所以最大數據存儲量是65536;
  2. short雖然是int型變數所占空間的1/2,但是在實際中卻很少用到。在大型數組中也可以節省空間。
  3. short使用示例:short a=100,short b=-200;

int

  1. int是32位的數據類型,占用4個位元組,預設值是0,它的取值範圍是(-2^31) ~(2^31-1),也就是 -2147483648 ~ 2147483647之間,所以最大數據存儲量是2^32-1;
  2. int是數據類型是整型,是我們在項目中用到最多的數據類型之一;
  3. int 使用示例:int a=1000,int b=-2000;

long

  1. long是64位的數據類型,占用8個位元組,預設值是0L,它的取值範圍是(-2^63) ~(2^63-1),也就是 -9223372036854775808 ~ 9223372036854775808之間,所以最大數據存儲量是2^64;
  2. long是數據類型是長整型,是我們在項目中用到最多的數據類型之一。在使用long類型的數據時最好在數值末尾帶上大寫的L!
  3. long 使用示例:long a=1000L,long b=-2000L;

float

  1. float是32位的數據類型,占用4個位元組,預設值是0,它的取值範圍是3.4e-45 ~ 1.4e38 之間;
  2. float是數據類型是單精度,在直接賦值時必須在數字後加上f或F。
  3. float使用示例:float a=10.25f, float b=-20.35F;

double

  1. double是64位的數據類型,占用8個位元組,預設值是0,它的取值範圍是4.9e-324 ~ 1.8e308 之間;
  2. double是數據類型是雙精度,在直接賦值的時候最好加上D或d。
  3. double使用示例:double a=10.123d, double b= -10.25644D;

boolean

  1. boolean是布爾類型,占用1個位元組,只有兩個值,false和true,預設值是 false。
  2. boolean只能用一種標誌來記錄 true或false,一般和 if 結合使用。
  3. boolean使用示例: boolean a=true,boolean b=false;

char

  1. char是字元類型,占用2個位元組,預設值為空,取值範圍 為 0~65535,也就是 \u0000 ~ \uffff
  2. char數據類型可以儲存任何字元。
  3. char 使用示例: char a=1,char b='A';

數值類型的級別從低到高分別為:
byte,char,short(這三個平級)——>int——>float——>long——>double
其中由低級別轉到高級別,是屬於自動類型轉換,這點是由系統自動轉換的。

例如將int類型的數據轉為float類型的數據。
示例:

int i=10;
float j=i;
System.out.println("i:"+i+",j:"+j);

結果:

i:10,j:10.0

如果由高級別轉為低級別,則需要強制轉換,也就是強制類型轉換。
例如將int類型的數據轉換為byte類型的數據。
示例:

int i=127;
int j=128;
byte bye=(byte)i;
byte bye2=(byte)j;
System.out.println("i:"+i+",bye:"+bye);
System.out.println("j:"+j+",bye2:"+bye2);

結果:

i:127,bye:127
j:128,bye2:-128

說明:因為 byte 類型是 8 位,最大值為127,所以當 int 強制轉換為 byte 類型時,值 128 時候就會導致溢出。所以在進行強制類型轉換的時候,要註意取值範圍!

強制轉換的時候需要註意數據的精確度,否則可能會出現數據精確丟失。
例如 double類型的數據轉換為float類型數據。
示例:

double d=10.1111115;
float f=(float) d;
System.out.println("f:"+f+",d:"+d);

結果:

f:10.111112,d:10.1111115

瞭解了數據類型的級別之後,如果用不同的數據類型進行計算,那麼最終的數據類型又是哪一種呢?
這裡我們用這幾種來測試:
1.byte 類型的數據 加 short 類型的數據;
2.short 類型的數據 加 int 類型的數據;
3.int 類型的數據 加 long 類型的數據;

這裡我們使用這個方法來獲取最終的數據類型

public static String getType(Object o){ 
        return o.getClass().toString(); 
    }

代碼:

short a=1;
byte b=2;
int c = 3;
long d = 4;
System.out.println(getType(a));
System.out.println(getType(b));
System.out.println(getType(c));
System.out.println(getType(d));
System.out.println(getType(a+b));
System.out.println(getType(a+c));
System.out.println(getType(c+d));

結果:

class java.lang.Short
class java.lang.Byte
class java.lang.Integer
class java.lang.Long
class java.lang.Integer
class java.lang.Integer
class java.lang.Long

看到結果是不是有點吃驚呢?那麼是為什麼呢?
這裡的不同的數值類型數據進行相加的時候,會自動轉換為級別最高的那一個。
那麼short 類型的數據加 byte 類型的數據為什麼是int類型呢?
因為在java的世界里,如果比int類型小的類型做運算,java在編譯的時候就會將它們統一強轉成int類型。
如果上述不好理解的,那麼這裡我們來做個實驗測試下,通過結果來進行驗證。
示例:

short a=1,b=2;
byte c=3,d=4;
System.out.println(getType(a+b));
System.out.println(getType(c+d));

結果:

class java.lang.Integer
class java.lang.Integer

那麼這裡可以得出結論,在數值類型中,若級別小於int,進行計算的時候,最終的數據類型會自動轉換為int,如果高於int,最終數據結果會取其中最高的一個!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這題與超級鋼琴類似,然而重覆的不重覆計算貢獻。。 那麼先求出數組nxt,nxt[i]表示第i個元素之後的第一個與其相等的元素的下標,不存在則nxt[i]=0 考慮取的區間左端點為1時的情況。 將讀入序列a中相等元素都只保留最先出現的,其餘變為0,然後求首碼和,得到數組b。 此時可以知道,設f(l,r ...
  • 最近做Java Web項目,在.jsp頁面和servlet之間request和response還是有些混淆,查閱了一些資料,總結如下,方便以後使用: 首先,servlet介面是最基本的,提供的五個方法也不多說了,關鍵是瞭解清楚什麼是request,什麼事response。 簡單來說: request ...
  • Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large re ...
  • 在業務中遇到了需要判斷文件是否存在的需求,所以順便整理一下python判斷文件是否存在的方法。在操作文件前,檢查文件是否存在也是一個良好的編程習慣。通常來說,有三種常見方式來判斷文件夾或文件是否存在,分別是os模塊,try語句和pathlib模塊。 os模塊 os模塊中的os.path.exists ...
  • 基本術語: 節點的度:書中某一節點擁有的子節點數量。 數的度:該樹中所有節點的度的最大值。 葉節點(終端節點):度為零的節點。 分支節點(非終端節點):度不為零的節點。 根節點(開始節點):樹中的第一個節點。 內部節點:樹中除了根節點之外的節點。 節點的層數:若根節點層數為1,根節點的第n代子節點的 ...
  • manifest文件是用來描述jar包的,它描述了該jar包的代碼是誰的,什麼版本,使用什麼版本的類庫等等。。。。具體如下: 1、基礎格式 manifest 文件的格式是很簡單的,每一行都是 名-值 對應的:屬性名開頭,接著是 ":" ,然後是屬性值,每行最多72個字元,如果需要增加,你可以在下一行 ...
  • 無意中看到了這篇文章,占時還沒用到這個知識,主要解決網頁訪問量增加到一定數量級帶來的網站停滯問題。前些時候也學了JVM相關知識,先碼一下,以後也許有用 以下文章轉至原文http://blog.csdn.net/u014236541/article/details/50008047 JVM參數調優是個 ...
  • 基於java版本的掃碼支付開發 最近做了一個電商,其中有涉及關於支付的問題,花了點小小的時間。因此寫了一個小demo,不能說完美,但是能實現下訂單掃碼支付功能。這裡我選擇的技術是J2EE中的servlet和jsp,支付環境採用的是支付寶中的沙箱環境(基於本人沒有企業級或者個人營業執照,無法申請支付接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...