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

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

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

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

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

1.1 精簡(jiǎn)版(快速上手)

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

1.2 詳細(xì)版(機(jī)制與陷阱)

public class StringToIntDemo {
    public static void main(String[] args) {
        // ========== 1. 核心方法對(duì)比 ==========
        // 【parseInt】返回基本類(lèi)型 int,適合計(jì)算
        // 內(nèi)部邏輯:逐個(gè)字符解析,遇到非數(shù)字立即拋異常
        int a = Integer.parseInt("100");           // 十進(jìn)制 100
        int b = Integer.parseInt("100", 8);        // 八進(jìn)制 100 = 64(十進(jìn)制)
        int c = Integer.parseInt("100", 16);       // 十六進(jìn)制 100 = 256(十進(jìn)制)
        // 【valueOf】返回 Integer 包裝類(lèi),有緩存優(yōu)化(-128~127)
        // 內(nèi)部實(shí)際調(diào)用 parseInt,但會(huì)走緩存池
        Integer obj1 = Integer.valueOf("100");
        Integer obj2 = Integer.valueOf("100");
        System.out.println(obj1 == obj2);  // true(緩存命中,同一對(duì)象)
        // 【decode】支持 0x/0X/0/# 前綴自動(dòng)識(shí)別進(jìn)制
        int d = Integer.decode("0xFF");    // 255(自動(dòng)識(shí)別十六進(jìn)制)
        int e = Integer.decode("#FF");     // 255(#也是十六進(jìn)制標(biāo)記)
        int f = Integer.decode("010");     // 8(0開(kāi)頭識(shí)別為八進(jìn)制)
        // ========== 2. 異常處理(生產(chǎn)環(huán)境必看) ==========
        String risky = " 123 ";  // 帶空格
        try {
            // 【陷阱1】前后空格會(huì)導(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) {
            // 【最佳實(shí)踐】記錄日志并給出默認(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)十進(jìn)制
" 123 "? 異常含空格,必須先 trim()
""? 異常空字符串無(wú)法解析
null? NPE非 NumberFormatException,需提前判空
"0xFF"? 異常parseInt 不認(rèn)識(shí)前綴,用 decode 或指定 radix=16
"123.45"? 異常含小數(shù)點(diǎn),應(yīng)先用 Double.parseDouble 再轉(zhuǎn) int

二、 字符串相加

2.1 精簡(jiǎn)版(性能核心)

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

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

public class StringConcatDemo {
    public static void main(String[] args) {
        // ========== 1. 編譯期優(yōu)化(常量折疊) ==========
        // 【常量折疊】編譯器在編譯階段直接計(jì)算出結(jié)果
        String a = "Hello" + " " + "World";  // 編譯后:String a = "Hello World";
        // 【陷阱】變量參與時(shí)無(wú)法優(yōu)化
        String b = "Hello";
        String c = b + " World";  // 編譯后實(shí)際是:new StringBuilder().append(b).append(" World").toString()
        // ========== 2. 運(yùn)行時(shí)拼接的本質(zhì)(StringBuilder) ==========
        // 反編譯后等價(jià)代碼:
        // String temp = new StringBuilder().append(b).append(" World").toString();
        // ========== 3. 循環(huán)中的致命陷阱 ==========
        // 【低效代碼】O(n2) 復(fù)雜度,創(chuàng)建 n 個(gè) StringBuilder 和 n 個(gè) String 對(duì)象
        String bad = "";
        for (int i = 0; i < 1000; i++) {
            bad += i;  // 每次循環(huán):new StringBuilder -> append -> toString
        }
        // 【高效代碼】O(n) 復(fù)雜度,只創(chuàng)建一個(gè) StringBuilder
        StringBuilder good = new StringBuilder(1000);  // 預(yù)估容量,避免擴(kuò)容
        for (int i = 0; i < 1000; i++) {
            good.append(i);
        }
        String result = good.toString();
        // 【性能對(duì)比】10000次拼接:
        // String+ 耗時(shí):約 200-500ms
        // StringBuilder 耗時(shí):約 1-2ms (差距200倍以上!)
        // ========== 4. 其他拼接方式 ==========
        // 【concat】String 自帶方法,內(nèi)部使用數(shù)組復(fù)制,比 + 快但不如 StringBuilder
        String s1 = "Hello".concat(" ").concat("World"); 
        // 【join】Java 8 新增,適合用分隔符合并多個(gè)字符串
        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 性能選擇決策樹(shù)

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

?? 一句話(huà)總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java連接redis及基本操作示例

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

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

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

    hadoop之MapReduce框架原理

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

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

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

最新評(píng)論

元阳县| 凉城县| 巴南区| 台东县| 顺义区| 英超| 元阳县| 梧州市| 吉安县| 大洼县| 澳门| 宽甸| 台南市| 兴海县| 娄底市| 南和县| 大英县| 宝应县| 疏勒县| 蓬莱市| 奎屯市| 长垣县| 新和县| 七台河市| 读书| 罗山县| 英吉沙县| 云浮市| 岢岚县| 黑水县| 和顺县| 台山市| 武功县| 通山县| 永平县| 岫岩| 邳州市| 景德镇市| 惠东县| 邻水| 长顺县|