最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java字符串轉(zhuǎn)整數(shù)與拼接實戰(zhàn)指南

 更新時間:2026年02月24日 10:15:36   作者:愛學(xué)習(xí)的小可愛盧  
本文總結(jié)了Java中字符串轉(zhuǎn)整數(shù)和字符串相加的核心知識點,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

本文總結(jié)Java中字符串轉(zhuǎn)整數(shù)和字符串相加的核心知識點:1. 字符串轉(zhuǎn)整數(shù):推薦使用Integer.parseInt()方法,需注意處理NumberFormatException異常,對帶空格的字符串要先trim(),大數(shù)值可使用Long.parseLong()或BigInteger。2. 字符串相加:編譯期常量可使用+運算符(會被優(yōu)化),但循環(huán)中必須使用StringBuilder以避免性能問題(性能差距可達200倍),多線程場景用StringBuffer,分隔符連接推薦String.join()。3. 關(guān)鍵陷阱:包括字符串轉(zhuǎn)數(shù)字時的空值處理、進制轉(zhuǎn)換問題,以及字符串拼接的性能優(yōu)化策略。

一、 字符串轉(zhuǎn)整形數(shù)字

1.1 精簡版(快速上手)

// 方式1:最常用(返回基本類型 int)
String str = "123";
int num = Integer.parseInt(str);  // 123
// 方式2:返回包裝類(有緩存優(yōu)化)
Integer numObj = Integer.valueOf(str);  // Integer 對象
// 異常處理(必加?。?
try {
    int badNum = Integer.parseInt("abc");  // 拋出 NumberFormatException
} catch (NumberFormatException e) {
    System.out.println("不是有效數(shù)字");
}
// 進制轉(zhuǎn)換(如十六進制)
int hex = Integer.parseInt("FF", 16);  // 255

1.2 詳細版(機制與陷阱)

public class StringToIntDemo {
    public static void main(String[] args) {
        // ========== 1. 核心方法對比 ==========
        // 【parseInt】返回基本類型 int,適合計算
        // 內(nèi)部邏輯:逐個字符解析,遇到非數(shù)字立即拋異常
        int a = Integer.parseInt("100");           // 十進制 100
        int b = Integer.parseInt("100", 8);        // 八進制 100 = 64(十進制)
        int c = Integer.parseInt("100", 16);       // 十六進制 100 = 256(十進制)
        // 【valueOf】返回 Integer 包裝類,有緩存優(yōu)化(-128~127)
        // 內(nèi)部實際調(diào)用 parseInt,但會走緩存池
        Integer obj1 = Integer.valueOf("100");
        Integer obj2 = Integer.valueOf("100");
        System.out.println(obj1 == obj2);  // true(緩存命中,同一對象)
        // 【decode】支持 0x/0X/0/# 前綴自動識別進制
        int d = Integer.decode("0xFF");    // 255(自動識別十六進制)
        int e = Integer.decode("#FF");     // 255(#也是十六進制標(biāo)記)
        int f = Integer.decode("010");     // 8(0開頭識別為八進制)
        // ========== 2. 異常處理(生產(chǎn)環(huán)境必看) ==========
        String risky = " 123 ";  // 帶空格
        try {
            // 【陷阱1】前后空格會導(dǎo)致解析失敗
            int fail = Integer.parseInt(risky);  // NumberFormatException
            // 【正確做法】先 trim
            int success = Integer.parseInt(risky.trim());  // 123
            // 【陷阱2】空字符串和 null
            // Integer.parseInt("");    // NumberFormatException(空串)
            // Integer.parseInt(null);  // NullPointerException(注意:不是 NumberFormatException!)
        } catch (NumberFormatException ex) {
            // 【最佳實踐】記錄日志并給出默認(rèn)值或終止流程
            System.err.println("非法數(shù)字格式:" + ex.getMessage());
            int defaultVal = 0; 
        }
        // ========== 3. 大數(shù)與邊界 ==========
        // 【陷阱3】超出 int 范圍(-2147483648 ~ 2147483647)
        // Integer.parseInt("2147483648");  // NumberFormatException(超出上限)
        // 【解決方案】用 Long
        long big = Long.parseLong("2147483648");
        // 【解決方案】更大用 BigInteger(任意精度)
        java.math.BigInteger huge = new java.math.BigInteger("99999999999999999999");
    }
}

1.3 關(guān)鍵陷阱總結(jié)表

輸入字符串結(jié)果原因
"123"? 123標(biāo)準(zhǔn)十進制
" 123 "? 異常含空格,必須先 trim()
""? 異常空字符串無法解析
null? NPE非 NumberFormatException,需提前判空
"0xFF"? 異常parseInt 不認(rèn)識前綴,用 decode 或指定 radix=16
"123.45"? 異常含小數(shù)點,應(yīng)先用 Double.parseDouble 再轉(zhuǎn) int

二、 字符串相加

2.1 精簡版(性能核心)

// 方式1:+ 運算符(編譯期常量優(yōu)化)
String s = "Hello" + " " + "World";  // 編譯后直接為 "Hello World"
// 方式2:循環(huán)中禁用 +(會產(chǎn)生大量臨時對象)
String result = "";
for (int i = 0; i < 100; i++) {
    result += i;  // 每次循環(huán)都創(chuàng)建新的 StringBuilder 和 String 對象,極慢!
}
// 方式3:StringBuilder(單線程推薦)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
    sb.append(i);
}
String result = sb.toString();
// 方式4:String.join(Java 8+,連接多個字符串)
String joined = String.join("-", "2024", "02", "23");  // "2024-02-23"

2.2 詳細版(編譯器優(yōu)化與陷阱)

public class StringConcatDemo {
    public static void main(String[] args) {
        // ========== 1. 編譯期優(yōu)化(常量折疊) ==========
        // 【常量折疊】編譯器在編譯階段直接計算出結(jié)果
        String a = "Hello" + " " + "World";  // 編譯后:String a = "Hello World";
        // 【陷阱】變量參與時無法優(yōu)化
        String b = "Hello";
        String c = b + " World";  // 編譯后實際是:new StringBuilder().append(b).append(" World").toString()
        // ========== 2. 運行時拼接的本質(zhì)(StringBuilder) ==========
        // 反編譯后等價代碼:
        // String temp = new StringBuilder().append(b).append(" World").toString();
        // ========== 3. 循環(huán)中的致命陷阱 ==========
        // 【低效代碼】O(n2) 復(fù)雜度,創(chuàng)建 n 個 StringBuilder 和 n 個 String 對象
        String bad = "";
        for (int i = 0; i < 1000; i++) {
            bad += i;  // 每次循環(huán):new StringBuilder -> append -> toString
        }
        // 【高效代碼】O(n) 復(fù)雜度,只創(chuàng)建一個 StringBuilder
        StringBuilder good = new StringBuilder(1000);  // 預(yù)估容量,避免擴容
        for (int i = 0; i < 1000; i++) {
            good.append(i);
        }
        String result = good.toString();
        // 【性能對比】10000次拼接:
        // String+ 耗時:約 200-500ms
        // StringBuilder 耗時:約 1-2ms (差距200倍以上!)
        // ========== 4. 其他拼接方式 ==========
        // 【concat】String 自帶方法,內(nèi)部使用數(shù)組復(fù)制,比 + 快但不如 StringBuilder
        String s1 = "Hello".concat(" ").concat("World"); 
        // 【join】Java 8 新增,適合用分隔符合并多個字符串
        String[] parts = {"Java", "Python", "C++"};
        String lang = String.join("、", parts);  // "Java、Python、C++"
        // 【formatted】Java 15+
        String info = "姓名:%s,年齡:%d".formatted("張三", 20);
        // 【StringJoiner】Java 8,適合構(gòu)造帶前后綴的字符串(如 SQL)
        java.util.StringJoiner joiner = new java.util.StringJoiner(", ", "[", "]");
        joiner.add("A").add("B").add("C");
        System.out.println(joiner.toString());  // [A, B, C]
    }
}

2.3 性能選擇決策樹

  • 需要拼接字符串?
  • ├── 編譯期常量(如 "a" + "b")→ 直接用 +(編譯器優(yōu)化)
  • ├── 單線程運行時拼接
  • │   ├── 次數(shù) < 5 → 用 +(可讀性好,性能可接受)
  • │   └── 次數(shù) ≥ 5 或循環(huán)中 → 用 StringBuilder
  • ├── 多線程共享變量拼接 → 用 StringBuffer(線程安全)
  • └── 需要分隔符連接多個字符串 → 用 String.join

?? 一句話總結(jié)

字符串轉(zhuǎn)數(shù)字用parseInt要防NumberFormatException和空值;字符串相加在循環(huán)中必須用StringBuilder,否則性能災(zāi)難。常量折疊讓"a"+"b"在編譯期就變成"ab",但變量相加會在運行時走StringBuilder。

到此這篇關(guān)于Java字符串轉(zhuǎn)整數(shù)與拼接實戰(zhàn)指南的文章就介紹到這了,更多相關(guān)java字符串轉(zhuǎn)整數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實現(xiàn)JWT動態(tài)密鑰輪換的示例詳解

    SpringBoot實現(xiàn)JWT動態(tài)密鑰輪換的示例詳解

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)JWT動態(tài)密鑰輪換的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-10-10
  • Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list'的問題解決

    Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?c

    這篇文章主要介紹了Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list',需要的朋友可以參考下
    2023-04-04
  • java如何創(chuàng)建一個jdbc程序詳解

    java如何創(chuàng)建一個jdbc程序詳解

    使用Java程序來操作數(shù)據(jù)庫,后者更加直接的話就是使用Java程序來發(fā)送SQL語句的技術(shù)稱之為:JDBC。下面這篇文章主要給大家介紹了關(guān)于利用java如何創(chuàng)建一個jdbc程序的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • Java如何實現(xiàn)封裝和包

    Java如何實現(xiàn)封裝和包

    文章主要介紹了Java中的封裝、訪問修飾符、封裝的好處、封裝的步驟、包的概念、導(dǎo)入包、自定義包、常用的包、static關(guān)鍵字及其用法、代碼塊、對象的打印等內(nèi)容
    2026-01-01
  • 如何使用Idea中的 Deployment 實現(xiàn)打包自動部署

    如何使用Idea中的 Deployment 實現(xiàn)打包自動部署

    這篇文章主要介紹了使用Idea中的 Deployment 實現(xiàn)打包自動部署,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Java隨機數(shù)算法原理與實現(xiàn)方法實例詳解

    Java隨機數(shù)算法原理與實現(xiàn)方法實例詳解

    這篇文章主要介紹了Java隨機數(shù)算法原理與實現(xiàn)方法,簡單分析了隨機數(shù)算法的原理并結(jié)合具體實例形式給出了java編程計算隨機數(shù)的具體操作技巧,需要的朋友可以參考下
    2017-09-09
  • Java連接redis及基本操作示例

    Java連接redis及基本操作示例

    這篇文章主要介紹了Java連接redis及基本操作,結(jié)合實例形式較為詳細的分析了java針對redis數(shù)據(jù)庫的基本連接、配置及操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • 用JAVA 設(shè)計生成二維碼詳細教程

    用JAVA 設(shè)計生成二維碼詳細教程

    本文主要介紹用JAVA 設(shè)計生成二維碼,這里一步一步詳細介紹用 java 如何設(shè)計二維碼,并附有代碼示例以便參考,有需要的小伙伴可以參考下
    2016-08-08
  • hadoop之MapReduce框架原理

    hadoop之MapReduce框架原理

    這篇文章主要介紹了hadoop的MapReduce框架原理,MapReduce是分為兩個階段的,MapperTask階段,和ReduceTask階段。如果有感興趣的小伙伴可以借鑒參考
    2023-03-03
  • Spring boot如何通過@Scheduled實現(xiàn)定時任務(wù)及多線程配置

    Spring boot如何通過@Scheduled實現(xiàn)定時任務(wù)及多線程配置

    這篇文章主要介紹了Spring boot如何通過@Scheduled實現(xiàn)定時任務(wù)及多線程配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

夏津县| 太白县| 固始县| 梧州市| 乌兰察布市| 双流县| 台湾省| 中阳县| 大庆市| 金湖县| 杭锦旗| 平湖市| 大洼县| 隆化县| 吉林省| 车致| 穆棱市| 壶关县| 克拉玛依市| 厦门市| 莲花县| 天镇县| 北辰区| 安岳县| 正阳县| 河津市| 伊宁市| 万山特区| 化州市| 呼玛县| 邯郸市| 德保县| 西华县| 东乌珠穆沁旗| 乌兰浩特市| SHOW| 沅陵县| 闽侯县| 清徐县| 德州市| 灵台县|