Double值比较真相揭秘
以下是各程序清单的执行结果及核心要点解析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)); } }执行结果3.14159 3.14159 - true解析Double.valueOf(3.14159)和Double.valueOf(314159E-5)都创建了表示相同浮点数值的Double对象。Double.equals()方法比较的是包装对象内部的基本double值而非对象引用。由于两个值在浮点数精度内相等因此返回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()); } }执行结果Infinity: true, false NaN: false, true解析1/0.在浮点数运算中结果为无穷大 (Infinity)isInfinite()返回true。0/0.在浮点数运算中结果为“非数字” (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); } }执行结果示例交互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解析程序从标准输入读取数字字符串使用Integer.parseInt()进行转换并累加。输入非数字字符串会抛出NumberFormatException被捕获后提示并计为0。输入0时循环终止。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)); } }执行结果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.); } } }执行结果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); } }执行结果示例具体数值因环境而异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类中totalMemory()、freeMemory()和gc()方法的使用。gc()是建议JVM进行垃圾回收不保证立即执行。分配Integer对象数组会消耗内存将其置为null并调用gc()后内存被回收。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.); } } }执行结果启动 Windows 记事本程序 (notepad.exe)。程序会立即返回不会等待记事本关闭。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()); } }执行结果启动 Windows 记事本并调用p.waitFor()等待其进程终止。关闭记事本后控制台输出其退出码通常为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()); } }执行结果示例取决于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.); } } }执行结果使用ProcessBuilder启动记事本并尝试打开名为testfile的文件。如果文件不存在记事本会新建一个空白文档。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)); } }执行结果示例Timing a for loop from 0 to 100,000,000 Elapsed time: 25解析使用System.currentTimeMillis()测量一个空循环的执行时间。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)); } }执行结果a ABCDEFGHIJ b MMMMMMMMMM a ABCDEFGHIJ b ABCDEFGHIJ a AABCDEFGHI b BCDEFGHIJJ解析演示System.arraycopy()方法进行数组复制。第一次复制将a的内容完全复制到b。第二次复制a自我复制导致元素右移b自我复制导致元素左移。Listing 13: ShowUserDirclass ShowUserDir { public static void main(String args[]) { System.out.println(System.getProperty(user.dir)); } }执行结果输出当前 Java 进程的工作目录绝对路径。Listing 14 15: CloneDemo 系列这两个清单展示了两种实现克隆的方式。Listing 14使用自定义的cloneTest()方法。Listing 15重写了Object.clone()方法并提升为public。执行结果两者相同x1: 10 20.98 x2: 10 20.98解析实现了Cloneable接口的类才能进行克隆。*克隆创建了原对象的一个副本副本的字段值与原对象相同。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()); } }执行结果x is object of type: X y is object of type: Y ys superclass is X解析演示运行时类型信息RTTI通过getClass()获取对象的Class对象。Class.getName()返回类名getSuperclass()返回父类的Class对象。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.); } }执行结果120.0 degrees is 2.0943951023931953 radians. 1.312 radians is 75.17206272116401 degrees.Listing 18: ThreadGroupDemo执行结果摘要创建两个线程组Group A 和 Group B每个组包含两个线程。线程启动后打印倒数数字。主线程暂停 Group A 中的线程 4 秒然后恢复。所有线程执行完毕后主线程退出。groupA.list()和groupB.list()会向标准错误输出线程组信息。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() ); } }执行结果输出当前类加载器加载的所有包的信息包括包名、实现标题、供应商和版本。输出内容因运行环境和JDK版本而异可能很长。参考来源java中system_Java中System类Soot Java程序分析与优化实战示例jacoco java_使用Jacoco获取 Java 程序的代码执行覆盖率jacoco java_使用Jacoco获取 Java 程序的代码执行覆盖率stopwatch java_利用StopWatch类监控Java代码执行时间并分析性能

相关新闻

华为MetaERP Oracle EBS 和 Oracle Fusion 的应收(AR)模块在业务范畴上高度一致(都覆盖发票→收款→核销→票据→收入确认→坏账的全生命周期),差异主要在会计引擎:EBS

华为MetaERP Oracle EBS 和 Oracle Fusion 的应收(AR)模块在业务范畴上高度一致(都覆盖发票→收款→核销→票据→收入确认→坏账的全生命周期),差异主要在会计引擎:EBS

Oracle EBS 和 Oracle Fusion 的应收(AR)模块在业务范畴上高度一致(都覆盖发票→收款→核销→票据→收入确认→坏账的全生命周期),差异主要在会计引擎:EBS 用 AutoAccounting SLA(XLA 表&#…

2026/10/5 12:42:44 阅读更多 →
全球无掩模光刻设备现状态势及发展趋势分析报告2026-2032年版

全球无掩模光刻设备现状态势及发展趋势分析报告2026-2032年版

无掩模光刻设备(Maskless Lithography Equipment)是指不依赖实体光掩模或reticle,而是通过电子束、激光束、数字光场调制、聚焦离子束等方式,将数字版图或图形数据直接写入光刻胶、聚合物、功能材料、晶圆、玻璃、封装基板或其他微…

2026/10/11 2:26:41 阅读更多 →
从零构建智能CLI工具:基于Python实现意图解析与任务自动化

从零构建智能CLI工具:基于Python实现意图解析与任务自动化

在实际开发工作中,我们每天都会面对大量重复、琐碎的电脑操作:创建项目脚手架、批量重命名文件、转换数据格式、执行系统命令、管理开发环境……这些任务虽然不复杂,但累积起来却消耗了大量时间和精力。有没有一种工具,能够像一个…

2026/10/1 6:19:38 阅读更多 →

最新新闻

C盘爆红不用怕:C盘搬家工具的原理与实操指南

C盘爆红不用怕:C盘搬家工具的原理与实操指南

前一阵子帮同事收拾电脑,那台办公机的C盘常年飘红,右键刷新都能卡上两秒,系统更新更是装一次失败一次。最离谱的是连系统时间都开始偶尔走偏,查了一圈才发现根因是磁盘满到连必要的临时文件都落不了地。这其实不是个例&#xff0c…

2026/10/11 2:26:02 阅读更多 →
船舶数据集VOC转YOLO格式与YOLOv8训练避坑指南

船舶数据集VOC转YOLO格式与YOLOv8训练避坑指南

简介:针对船舶目标检测场景的YOLO系列数据集已封装为zip包,面向目标检测算法学习者和开发者,覆盖充气船、独木舟等类别的1088张带标签图像,适合海事监控、水上交通等场景的模型训练与实验。包内共有2000个文件:1063个x…

2026/10/11 2:26:02 阅读更多 →
ESP32-S31一键烧录包制作:镜像合并与数据边界保护实战

ESP32-S31一键烧录包制作:镜像合并与数据边界保护实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 2:26:02 阅读更多 →
基于PyTorch的CNN火焰识别项目实战:从数据集到PyQt界面

基于PyTorch的CNN火焰识别项目实战:从数据集到PyQt界面

简介:本资源面向具备一定Python与深度学习基础、希望快速上手图像分类实战的开发者与学习者,提供一套基于PyTorch框架的CNN火焰识别完整方案,可用于火灾预警、安防监控等场景的算法验证与二次开发。压缩包共302个文件,以288张jpg与…

2026/10/11 2:26:02 阅读更多 →
告别鼠标:系统整理高效快捷键思维与实操技巧

告别鼠标:系统整理高效快捷键思维与实操技巧

你们有没有遇到过这种场面:旁边同事噼里啪啦一顿操作,窗口切换、文件另存、表格求和,鼠标基本不碰,几分钟搞定你磨蹭半小时的活儿。你不好意思问,只能默默盯着屏幕,心想这人是不是开了什么外挂。其实没啥神…

2026/10/11 2:26:02 阅读更多 →
二手车交易数据分析与可视化:从清洗到交互看板的完整实践

二手车交易数据分析与可视化:从清洗到交互看板的完整实践

简介:二手车交易数据分析与可视化系统是一份面向数据分析学习者与前端开发者的综合实战资源。项目整合网络爬虫、前后端分离架构、MySQL数据库存储以及Pandas/NumPy数据分析流程,最终通过Echarts、Plotly等交互式图表呈现二手车价格、里程与市场趋势&…

2026/10/11 2:25:01 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →