Java基礎篇(01):基本數據類型,核心點整理

来源:https://www.cnblogs.com/cicada-smile/archive/2020/03/08/12445215.html
-Advertisement-
Play Games

本文源碼: "GitHub·點這裡" || "GitEE·點這裡" 一、基本類型 1、基本類型 不使用New創建,聲明一個非引用傳遞的變數,且變數的值直接置於堆棧中,大小不隨運行環境變化,效率更高。使用new創建的引用對象存儲在堆中。 2、基本信息 基本類型包括如下幾種:byte、short、int ...


本文源碼:GitHub·點這裡 || GitEE·點這裡

一、基本類型

1、基本類型

不使用New創建,聲明一個非引用傳遞的變數,且變數的值直接置於堆棧中,大小不隨運行環境變化,效率更高。使用new創建的引用對象存儲在堆中。

2、基本信息

基本類型包括如下幾種:byte、short、int、long、float、double、boolean、char,可以通過相關方法查看範圍大小。

public class IntType01 {
    public static void main(String[] args) {
        System.out.println("進位位數:"+Integer.SIZE);
        System.out.println("最小值:"+Integer.MIN_VALUE);
        System.out.println("最大值:"+Integer.MAX_VALUE);
        System.out.println("進位位數:"+Double.SIZE);
        System.out.println("最小值:"+Double.MIN_VALUE);
        System.out.println("最大值:"+Double.MAX_VALUE);
    }
}

二、案例用法

1、類型轉換

自動轉換:範圍小的數據類型可以自動轉換成範圍大的數據類型。

強制轉換:把一種數據類型轉換為另外一種數據類型。

類型提升:表達式運算中有不同的數據類型,類型會自動向範圍大的提升。

public class IntType02 {
    public static void main(String[] args) {
        // 自動轉換
        int i = 112 ;
        long j = i ;
        System.out.println(j);
        // 強制轉換
        double d = 13.14 ;
        int f = (int)d;
        System.out.println(f);
        // 類型提升
        long r = i * j ;
        System.out.println(r);
    }
}

註意:類型轉換中最需要關註的問題就是範圍大小問題。

2、包裝器類型

基本數據類型不符合面向對象思想,從而出現了包裝器類型, 並且包裝器添加了更多的屬性和方法,自動包裝功能可以將基本類型轉換為包裝器類型。Java為每個原始類型都提供了一個封裝類,Integer、Double、Long、Boolean、Byte等等。

public class IntType03 {
    public static void main(String[] args) {
        Integer int1 = null ;
        Double dou1 = 13.14 ;
        Long lon1 = 123L ;
    }
}

Integer變數的預設值為null,說明Integer可以區分出未賦值和值為0的區別,好比考試得0分和沒參加考試的區別。

3、字元類型

char類型變數是用來儲存Unicode編碼的字元的,unicode字元集包含漢字。

public class IntType04 {
    public static void main(String[] args) {
        char cha1 = '知';
        System.out.println(cha1);
    }
}

註意:可能存在特殊生僻字沒有包含在unicode編碼字元集中。

4、賦值和運算

+= 和 = 的區分:short s1=1;s1=s1+1與short s1=1;s1+=1;問題。

public class IntType05 {
    public static void main(String[] args) {
        short s1 = 1 ;
        // s1 = s1 + 1 ; // 變異錯誤:s1自動向int類型轉換
        s1 += 1 ;
        System.out.println(s1);
    }
}

+=運算符是java語言規定的,編譯器會對它進行識別處理,因此可以正確編譯。

5、布爾類型

兩個邏輯值: truefalse,通常用來表示關係運算的結果。

public class IntType06 {
    public static void main(String[] args) {
        // 存在精度損失問題:0.30000000000000004
        System.out.println(3*0.1);
        // true
        System.out.println(0.3 == 0.3);
        // false
        System.out.println(3*0.1 == 0.3);
    }
}

三、Float和Dubble

1、基礎概念

這兩個類型可能大部分情況下都說不明白關係和區分,首先要理解幾個基礎概念。

浮點數:在電腦中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數乘以某個基數(電腦中通常是2)的整數次冪得到

單精度浮點數:單精度浮點數是用來表示帶有小數部分的實數,一般用於科學計算。占用4個位元組(32位)存儲空間

雙精度浮點數:雙精度浮點數(double)是電腦使用的一種數據類型,使用64位(8位元組)來存儲一個浮點數。

2、對比分析

  • Float基本描述
位數:32
最小值:1.4E-45
最大值:3.4028235E38
  • Double基本描述
位數:64
最小值:4.9E-324
最大值:1.7976931348623157E308
  • 案例描述

float和double聲明和轉換相關演示案例。

public class IntType07 {
    public static void main(String[] args) {
        // float 聲明
        float f1 = 12.3f ;
        // double 聲明
        double d1 = 13.4 ;
        // 向下轉型,需要強制轉換
        float f2 = (float) d1 ;
        System.out.println("f1="+f1+";d1="+d1+";f2="+f2);
    }
}

四、高精度類型

1、BigInteger

支持任意大小的整數運算,且不會再運算過程有任何丟失情況,沒有對應的基本類型,運算也會變得相對複雜,運算速度自然也就會下降。

2、BigDecimal

支持任意精度的定點數,通常用來進行精確的貨幣計算,在公司的日常開發中,這裡通常是硬性要求。

public class IntType08 {
    public static void main(String[] args) {
        BigDecimal dec1 = new BigDecimal(3.0) ;
        BigDecimal dec2 = new BigDecimal(2.11) ;
        // 精確加法運算
        BigDecimal res1 = dec1.add(dec2) ;
        System.out.println(res1);
        // 精確減法運算,並截取結果
        // HALF_UP:四捨五入
        BigDecimal res2 = dec1.subtract(dec2);
        System.out.println(res2.setScale(1, RoundingMode.HALF_UP));
        // 精確乘法運算
        BigDecimal res3 = dec1.multiply(dec2) ;
        System.out.println(res3.doubleValue());
        // 精確除法運算,並截取結果
        // ROUND_DOWN:直接按保留位數截取
        BigDecimal res4 = dec1.divide(dec2,2,BigDecimal.ROUND_DOWN);
        System.out.println(res4);
    }
}

五、源代碼地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent


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

-Advertisement-
Play Games
更多相關文章
  • 只要有一輪沒有發生交換,說明數據的順序已經排好,沒有必要繼續進行迴圈下去了。 public static void main(String[] args) { int[] arr = {1,3,5,7,9,2,4,6,8,0}; sort(arr); } public static void sor ...
  • 1,什麼是字元串? 所謂字元串本質上就是以'\0作為'結尾的特殊字元數組; 2,定義字元串的過程中有哪些註意點 由於字元串本質上其實就是以'\0作為'結尾的特殊字元數組,所以定義字元串時,必須保證字元串存儲的最後一個元素為'\0'。 當我們沒有給定字元串具體長度時,我們通過這種方式:char 字元串 ...
  • 如果元素已經在該在的位置上就不需要再交換位置了。 public static void main(String[] args) { int[] arr = {1,3,5,7,9,2,4,6,8,0}; sort(arr); } public static void sort(int[] arr){ ...
  • 本文主要介紹了JVM—GC垃圾回收器,並對其進行了總結。主要包含了Serial收集器、ParNew收集器、Parallel Scavenge收集器、Servial Old收集器、Parallel Old收集器、CMS收集器、G1收集器。 ...
  • 學習Socket時, 想實現一個讀寫分離,能夠實時接收和發送消息的socket,卻一直發送消息出去卻不能列印出來。 客戶端發送消息出去後。 客戶端卻不能列印出消息,客戶端也不能列印出消息。 一直冥思苦想,一直到不到問題所在。 直到 發現 PrintWriter將 write 方法 改為 printl ...
  • 基於SSM開發餐飲業點餐系統 開發環境: Windows操作系統開發工具: MyEclipse+Jdk+Tomcat+MySql資料庫運行效果圖 @ResponseBody @RequestMapping(value = "/checkUsername") public String checkUs ...
  • 本文主要介紹Java—System類和Runtime類的概念及使用。 ...
  • 1.Java中的抽象類 用最簡單的話來說, 一個抽象類就是使用keyword聲明為abstract的 。它可能包含也可能不包含任何抽象方法。JVM將抽象類標識為 不完整類 , 該類 尚未定義其完整行為。聲明一個類 僅強制執行一件事:您不能創建此類的實例,僅此而已。那麼,為什麼還要費心創建一個根本無法 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...