Double值比較真相揭秘
以下是各程序清單的執(zhí)行結(jié)果及核心要點(diǎn)解析Listing 1: DoubleDemoclass DoubleDemo { public static void main(String args[]) { Double d1 Double.valueOf(3.14159); Double d2 Double.valueOf(314159E-5); System.out.println(d1 d2 - d1.equals(d2)); } }執(zhí)行結(jié)果3.14159 3.14159 - true解析Double.valueOf(3.14159)和Double.valueOf(314159E-5)都創(chuàng)建了表示相同浮點(diǎn)數(shù)值的Double對(duì)象。Double.equals()方法比較的是包裝對(duì)象內(nèi)部的基本double值而非對(duì)象引用。由于兩個(gè)值在浮點(diǎn)數(shù)精度內(nèi)相等因此返回true。Listing 2: InfNaNclass InfNaN { public static void main(String args[]) { Double d1 Double.valueOf(1/0.); Double d2 Double.valueOf(0/0.); System.out.println(d1 : d1.isInfinite() , d1.isNaN()); System.out.println(d2 : d2.isInfinite() , d2.isNaN()); } }執(zhí)行結(jié)果Infinity: true, false NaN: false, true解析1/0.在浮點(diǎn)數(shù)運(yùn)算中結(jié)果為無(wú)窮大 (Infinity)isInfinite()返回true。0/0.在浮點(diǎn)數(shù)運(yùn)算中結(jié)果為“非數(shù)字” (NaN)isNaN()返回true。Listing 3: ParseDemoimport java.io.*; class ParseDemo { public static void main(String args[]) throws IOException { BufferedReader br new BufferedReader(new InputStreamReader(System.in)); String str; int i; int sum0; System.out.println(Enter numbers, 0 to quit.); do { str br.readLine(); try { i Integer.parseInt(str); } catch(NumberFormatException e) { System.out.println(Invalid format); i 0; } sum i; System.out.println(Current sum is: sum); } while(i ! 0); } }執(zhí)行結(jié)果示例交互Enter numbers, 0 to quit. 5 Current sum is: 5 10 Current sum is: 15 abc Invalid format Current sum is: 15 0 Current sum is: 15解析程序從標(biāo)準(zhǔn)輸入讀取數(shù)字字符串使用Integer.parseInt()進(jìn)行轉(zhuǎn)換并累加。輸入非數(shù)字字符串會(huì)拋出NumberFormatException被捕獲后提示并計(jì)為0。輸入0時(shí)循環(huán)終止。Listing 4: StringConversionsclass StringConversions { public static void main(String args[]) { int num 19648; System.out.println(num in binary: Integer.toBinaryString(num)); System.out.println(num in octal: Integer.toOctalString(num)); System.out.println(num in hexadecimal: Integer.toHexString(num)); } }執(zhí)行結(jié)果19648 in binary: 100110011000000 19648 in octal: 46300 19648 in hexadecimal: 4cc0Listing 5: IsDemoclass IsDemo { public static void main(String args[]) { char a[] {a, b, 5, ?, A, }; for(int i0; ia.length; i) { if(Character.isDigit(a[i])) System.out.println(a[i] is a digit.); if(Character.isLetter(a[i])) System.out.println(a[i] is a letter.); if(Character.isWhitespace(a[i])) System.out.println(a[i] is whitespace.); if(Character.isUpperCase(a[i])) System.out.println(a[i] is uppercase.); if(Character.isLowerCase(a[i])) System.out.println(a[i] is lowercase.); } } }執(zhí)行結(jié)果a is a letter. a is lowercase. b is a letter. b is lowercase. 5 is a digit. A is a letter. A is uppercase. is whitespace.Listing 6: MemoryDemoclass MemoryDemo { public static void main(String args[]) { Runtime r Runtime.getRuntime(); long mem1, mem2; Integer someints[] new Integer[1000]; System.out.println(Total memory is: r.totalMemory()); mem1 r.freeMemory(); System.out.println(Initial free memory: mem1); r.gc(); mem1 r.freeMemory(); System.out.println(Free memory after garbage collection: mem1); for(int i0; i1000; i) someints[i] Integer.valueOf(i); mem2 r.freeMemory(); System.out.println(Free memory after allocation: mem2); System.out.println(Memory used by allocation: (mem1-mem2)); for(int i0; i1000; i) someints[i] null; r.gc(); mem2 r.freeMemory(); System.out.println(Free memory after collecting discarded Integers: mem2); } }執(zhí)行結(jié)果示例具體數(shù)值因環(huán)境而異Total memory is: 130023424 Initial free memory: 128632160 Free memory after garbage collection: 129378880 Free memory after allocation: 129374152 Memory used by allocation: 4728 Free memory after collecting discarded Integers: 129378880解析展示了Runtime類(lèi)中totalMemory()、freeMemory()和gc()方法的使用。gc()是建議JVM進(jìn)行垃圾回收不保證立即執(zhí)行。分配Integer對(duì)象數(shù)組會(huì)消耗內(nèi)存將其置為null并調(diào)用gc()后內(nèi)存被回收。Listing 7: ExecDemoclass ExecDemo { public static void main(String args[]) { Runtime r Runtime.getRuntime(); Process p null; try { p r.exec(notepad); } catch (Exception e) { System.out.println(Error executing notepad.); } } }執(zhí)行結(jié)果啟動(dòng) Windows 記事本程序 (notepad.exe)。程序會(huì)立即返回不會(huì)等待記事本關(guān)閉。Listing 8: ExecDemoFiniclass ExecDemoFini { public static void main(String args[]) { Runtime r Runtime.getRuntime(); Process p null; try { p r.exec(notepad); p.waitFor(); } catch (Exception e) { System.out.println(Error executing notepad.); } System.out.println(Notepad returned p.exitValue()); } }執(zhí)行結(jié)果啟動(dòng) Windows 記事本并調(diào)用p.waitFor()等待其進(jìn)程終止。關(guān)閉記事本后控制臺(tái)輸出其退出碼通常為0。Listing 9 20: VerDemoclass VerDemo { public static void main(String args[]) { Runtime.Version ver Runtime.version(); System.out.println(Major version: ver.major()); System.out.println(Minor version: ver.minor()); System.out.println(Security version: ver.security()); } }執(zhí)行結(jié)果示例取決于JDK版本Major version: 17 Minor version: 0Security version: 0Listing 10: PBDemoclass PBDemo { public static void main(String args[]) { try { ProcessBuilder proc new ProcessBuilder(notepad.exe, testfile); proc.start(); } catch (Exception e) { System.out.println(Error executing notepad.); } } }執(zhí)行結(jié)果使用ProcessBuilder啟動(dòng)記事本并嘗試打開(kāi)名為testfile的文件。如果文件不存在記事本會(huì)新建一個(gè)空白文檔。Listing 11: Elapsedclass Elapsed { public static void main(String args[]) { long start, end; System.out.println(Timing a for loop from 0 to 100,000,000); start System.currentTimeMillis(); for(long i0; i 100000000L; i) ; end System.currentTimeMillis(); System.out.println(Elapsed time: (end-start)); } }執(zhí)行結(jié)果示例Timing a for loop from 0 to 100,000,000 Elapsed time: 25解析使用System.currentTimeMillis()測(cè)量一個(gè)空循環(huán)的執(zhí)行時(shí)間。Listing 12: ACDemoclass ACDemo { static byte a[] { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 }; static byte b[] { 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }; public static void main(String args[]) { System.out.println(a new String(a)); System.out.println(b new String(b)); System.arraycopy(a, 0, b, 0, a.length); System.out.println(a new String(a)); System.out.println(b new String(b)); System.arraycopy(a, 0, a, 1, a.length - 1); System.arraycopy(b, 1, b, 0, b.length1); System.out.println(a new String(a)); System.out.println(b new String(b)); } }執(zhí)行結(jié)果a ABCDEFGHIJ b MMMMMMMMMM a ABCDEFGHIJ b ABCDEFGHIJ a AABCDEFGHI b BCDEFGHIJJ解析演示System.arraycopy()方法進(jìn)行數(shù)組復(fù)制。第一次復(fù)制將a的內(nèi)容完全復(fù)制到b。第二次復(fù)制a自我復(fù)制導(dǎo)致元素右移b自我復(fù)制導(dǎo)致元素左移。Listing 13: ShowUserDirclass ShowUserDir { public static void main(String args[]) { System.out.println(System.getProperty(user.dir)); } }執(zhí)行結(jié)果輸出當(dāng)前 Java 進(jìn)程的工作目錄絕對(duì)路徑。Listing 14 15: CloneDemo 系列這兩個(gè)清單展示了兩種實(shí)現(xiàn)克隆的方式。Listing 14使用自定義的cloneTest()方法。Listing 15重寫(xiě)了Object.clone()方法并提升為public。執(zhí)行結(jié)果兩者相同x1: 10 20.98 x2: 10 20.98解析實(shí)現(xiàn)了Cloneable接口的類(lèi)才能進(jìn)行克隆。*克隆創(chuàng)建了原對(duì)象的一個(gè)副本副本的字段值與原對(duì)象相同。Listing 16: RTTIclass X { int a; float b; } class Y extends X { double c; } class RTTI { public static void main(String args[]) { X x new X(); Y y new Y(); Class? clObj; clObj x.getClass(); System.out.println(x is object of type: clObj.getName()); clObj y.getClass(); System.out.println(y is object of type: clObj.getName()); clObj clObj.getSuperclass(); System.out.println(ys superclass is clObj.getName()); } }執(zhí)行結(jié)果x is object of type: X y is object of type: Y ys superclass is X解析演示運(yùn)行時(shí)類(lèi)型信息RTTI通過(guò)getClass()獲取對(duì)象的Class對(duì)象。Class.getName()返回類(lèi)名getSuperclass()返回父類(lèi)的Class對(duì)象。Listing 17: Anglesclass Angles { public static void main(String args[]) { double theta 120.0; System.out.println(theta degrees is Math.toRadians(theta) radians.); theta 1.312; System.out.println(theta radians is Math.toDegrees(theta) degrees.); } }執(zhí)行結(jié)果120.0 degrees is 2.0943951023931953 radians. 1.312 radians is 75.17206272116401 degrees.Listing 18: ThreadGroupDemo執(zhí)行結(jié)果摘要?jiǎng)?chuàng)建兩個(gè)線程組Group A 和 Group B每個(gè)組包含兩個(gè)線程。線程啟動(dòng)后打印倒數(shù)數(shù)字。主線程暫停 Group A 中的線程 4 秒然后恢復(fù)。所有線程執(zhí)行完畢后主線程退出。groupA.list()和groupB.list()會(huì)向標(biāo)準(zhǔn)錯(cuò)誤輸出線程組信息。Listing 19: PkgTestclass PkgTest { public static void main(String args[]) { Package pkgs[] Package.getPackages(); for(int i0; i pkgs.length; i) System.out.println( pkgs[i].getName() pkgs[i].getImplementationTitle() pkgs[i].getImplementationVendor() pkgs[i].getImplementationVersion() ); } }執(zhí)行結(jié)果輸出當(dāng)前類(lèi)加載器加載的所有包的信息包括包名、實(shí)現(xiàn)標(biāo)題、供應(yīng)商和版本。輸出內(nèi)容因運(yùn)行環(huán)境和JDK版本而異可能很長(zhǎng)。參考來(lái)源java中system_Java中System類(lèi)Soot Java程序分析與優(yōu)化實(shí)戰(zhàn)示例jacoco java_使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率jacoco java_使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率stopwatch java_利用StopWatch類(lèi)監(jiān)控Java代碼執(zhí)行時(shí)間并分析性能

相關(guān)新聞

華為MetaERP Oracle EBS 和 Oracle Fusion 的應(yīng)收(AR)模塊在業(yè)務(wù)范疇上高度一致(都覆蓋發(fā)票→收款→核銷(xiāo)→票據(jù)→收入確認(rèn)→壞賬的全生命周期),差異主要在會(huì)計(jì)引擎:EBS

華為MetaERP Oracle EBS 和 Oracle Fusion 的應(yīng)收(AR)模塊在業(yè)務(wù)范疇上高度一致(都覆蓋發(fā)票→收款→核銷(xiāo)→票據(jù)→收入確認(rèn)→壞賬的全生命周期),差異主要在會(huì)計(jì)引擎:EBS

Oracle EBS 和 Oracle Fusion 的應(yīng)收(AR)模塊在業(yè)務(wù)范疇上高度一致(都覆蓋發(fā)票→收款→核銷(xiāo)→票據(jù)→收入確認(rèn)→壞賬的全生命周期),差異主要在會(huì)計(jì)引擎:EBS 用 AutoAccounting SLA(XLA 表&#…

2026/8/4 3:02:43 閱讀更多
Unity鏡面反射Shader:從Phong到Blinn-Phong光照模型實(shí)現(xiàn)與優(yōu)化

Unity鏡面反射Shader:從Phong到Blinn-Phong光照模型實(shí)現(xiàn)與優(yōu)化

1. 項(xiàng)目概述:為什么鏡面反射Shader是Unity開(kāi)發(fā)者的必修課在Unity里做項(xiàng)目,尤其是涉及到高品質(zhì)視覺(jué)效果的游戲、模擬器或者交互應(yīng)用,你遲早會(huì)碰到一個(gè)坎:想讓你的水面、金屬、玻璃或者任何光滑表面看起來(lái)“真實(shí)”。這個(gè)“真實(shí)感”的…

2026/8/4 3:02:43 閱讀更多
Java高級(jí)面試核心10題:JVM、并發(fā)、Spring、Redis與系統(tǒng)設(shè)計(jì)深度解析

Java高級(jí)面試核心10題:JVM、并發(fā)、Spring、Redis與系統(tǒng)設(shè)計(jì)深度解析

在實(shí)際 Java 高級(jí)工程師的面試中,面試官常常會(huì)通過(guò)一系列精心設(shè)計(jì)的問(wèn)題來(lái)考察候選人的技術(shù)深度、知識(shí)廣度以及解決復(fù)雜問(wèn)題的能力。這些問(wèn)題往往不是簡(jiǎn)單的 API 記憶,而是圍繞 JVM、并發(fā)、框架原理、系統(tǒng)設(shè)計(jì)等核心領(lǐng)域展開(kāi)的“送命題”,旨在…

2026/8/4 3:02:43 閱讀更多
Java使用Apache POI批量導(dǎo)出Excel圖片:原理、實(shí)現(xiàn)與性能優(yōu)化

Java使用Apache POI批量導(dǎo)出Excel圖片:原理、實(shí)現(xiàn)與性能優(yōu)化

1. 項(xiàng)目概述:從Excel單元格到獨(dú)立圖片文件的跨越在日常的數(shù)據(jù)處理與報(bào)表生成工作中,我們常常會(huì)遇到一個(gè)看似簡(jiǎn)單卻頗為棘手的需求:如何將Excel文件中精心嵌入的圖表、形狀或圖片,批量、高質(zhì)量地導(dǎo)出為獨(dú)立的圖片文件?無(wú)…

2026/8/4 3:52:47 閱讀更多
回溯算法精解:從N皇后問(wèn)題掌握遞歸、剪枝與狀態(tài)搜索

回溯算法精解:從N皇后問(wèn)題掌握遞歸、剪枝與狀態(tài)搜索

1. 從棋盤(pán)到代碼:N皇后問(wèn)題的現(xiàn)實(shí)映射如果你玩過(guò)國(guó)際象棋,或者看過(guò)相關(guān)的影視作品,一定會(huì)對(duì)“皇后”這個(gè)棋子的威力印象深刻。它可以在棋盤(pán)上橫沖直撞、斜行無(wú)忌,攻擊范圍覆蓋了整條直線和兩條對(duì)角線?,F(xiàn)在,想象這樣一…

2026/8/4 3:52:47 閱讀更多
基于Docker部署AI客戶端API網(wǎng)關(guān):打破AI應(yīng)用孤島

基于Docker部署AI客戶端API網(wǎng)關(guān):打破AI應(yīng)用孤島

1. 項(xiàng)目概述與核心價(jià)值最近在折騰一些AI應(yīng)用時(shí),發(fā)現(xiàn)一個(gè)挺有意思的需求:很多AI客戶端(比如一些桌面工具、移動(dòng)端App)功能強(qiáng)大,但它們的數(shù)據(jù)往往封閉在本地,很難被其他程序調(diào)用。而另一方面,我們…

2026/8/4 3:52:47 閱讀更多
創(chuàng)境?XR國(guó)產(chǎn)一站式零代碼 AR/VR/MR 全場(chǎng)景內(nèi)容創(chuàng)作及應(yīng)用引擎

創(chuàng)境?XR國(guó)產(chǎn)一站式零代碼 AR/VR/MR 全場(chǎng)景內(nèi)容創(chuàng)作及應(yīng)用引擎

創(chuàng)境?XR 是北京中科優(yōu)辰星宇科技有限責(zé)任公司研發(fā)的國(guó)產(chǎn)一站式零代碼 AR/VR/MR 全場(chǎng)景內(nèi)容創(chuàng)作及應(yīng)用引擎,國(guó)產(chǎn)”3D版剪映“、 XR 內(nèi)容創(chuàng)作的 “中央廚房”,覆蓋從 2D 平面互動(dòng)到 3D 沉浸式交互的全類(lèi)型 XR 內(nèi)容生產(chǎn),采用 PC 專(zhuān)業(yè)端、網(wǎng)頁(yè)端…

2026/8/4 3:52:47 閱讀更多
二叉樹(shù)重建:從遍歷序列到樹(shù)結(jié)構(gòu)的遞歸構(gòu)建與工程優(yōu)化

二叉樹(shù)重建:從遍歷序列到樹(shù)結(jié)構(gòu)的遞歸構(gòu)建與工程優(yōu)化

1. 項(xiàng)目概述:二叉樹(shù)重建的“施工藍(lán)圖”在數(shù)據(jù)結(jié)構(gòu)的世界里,二叉樹(shù)就像一座精巧的建筑。我們常常會(huì)得到關(guān)于這座建筑的兩種“圖紙”:一種是描繪了訪問(wèn)房間順序的“遍歷序列”,另一種則是記錄了房間之間父子關(guān)系的“結(jié)構(gòu)信息”。而“…

2026/8/4 3:52:45 閱讀更多
Java音頻元數(shù)據(jù)解析實(shí)戰(zhàn):使用Jaudiotagger獲取MP3/FLAC/M4A標(biāo)簽與屬性

Java音頻元數(shù)據(jù)解析實(shí)戰(zhàn):使用Jaudiotagger獲取MP3/FLAC/M4A標(biāo)簽與屬性

1. 項(xiàng)目緣起:為什么需要自己解析音頻信息?在Java項(xiàng)目中處理音樂(lè)文件,很多時(shí)候我們需要的不僅僅是“播放”這個(gè)動(dòng)作。比如,你正在開(kāi)發(fā)一個(gè)音樂(lè)播放器,用戶上傳了一堆MP3文件,你希望自動(dòng)根據(jù)歌曲的藝術(shù)家、專(zhuān)…

2026/8/4 3:42:44 閱讀更多
清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

通訊作者:鄧兵、劉建國(guó)通訊單位:清華大學(xué)DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清潔能源技術(shù)與電子器件不可或缺的核心原料,然而傳統(tǒng)提取方式依賴能耗高、排放大的采礦與強(qiáng)…

2026/8/4 0:01:30 閱讀更多
貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

研究背景質(zhì)子交換膜燃料電池(PEMFCs)因其高能量轉(zhuǎn)換效率和清潔零排放特性備受關(guān)注,然而陰極氧還原反應(yīng)(ORR)動(dòng)力學(xué)遲緩、鉑催化劑成本高昂且耐久性不足的問(wèn)題嚴(yán)重制約了其商業(yè)化進(jìn)程。將 Pt 與 3d 過(guò)渡金屬合金化可調(diào)控…

2026/8/4 0:01:30 閱讀更多
福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

通訊作者:萬(wàn)宇馳、張久俊、呂瑞濤通訊單位:福州大學(xué) 、清華大學(xué)DOI:https://doi.org/10.1002/adfm.76112核心導(dǎo)讀:本文提出"分步升級(jí)"廢硝酸鹽處理新路線——利用廢水中的金屬離子經(jīng)快速焦耳熱(40V&#xff…

2026/8/4 0:01:30 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/3 7:44:46 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/3 12:53:38 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/3 19:34:52 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/3 19:34:54 閱讀更多