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/8/4 3:02:02 阅读更多 →
全球无掩模光刻设备现状态势及发展趋势分析报告2026-2032年版

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

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

2026/8/4 3:01:02 阅读更多 →
从零构建智能CLI工具:基于Python实现意图解析与任务自动化

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

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

2026/8/4 3:01:02 阅读更多 →

最新新闻

基于Oracle DB与MCP协议构建AI Agent三位一体记忆系统

基于Oracle DB与MCP协议构建AI Agent三位一体记忆系统

1. 项目缘起:当AI Agent需要记住“一切” 最近在折腾一个AI Agent项目,遇到了一个非常典型的问题:Agent的“记忆力”太差了。这里的记忆力,不是指大模型本身的上下文长度,而是指Agent在长期运行、与用户多次交互、执行…

2026/8/4 3:49:26 阅读更多 →
Godot-Nim项目手动属性注册:非导出方式暴露类型属性的技术解析

Godot-Nim项目手动属性注册:非导出方式暴露类型属性的技术解析

1. 项目概述:为什么我们需要“非导出”属性?在Godot引擎的游戏开发中,尤其是使用GDScript时,我们习惯了在脚本中声明一个变量,然后在编辑器的Inspector面板中勾选“Export”复选框,一个属性就暴露出来了。这…

2026/8/4 3:49:26 阅读更多 →
大数据Hadoop运维应用实践——大数据平台架构_日志收集与分析工具Logstash

大数据Hadoop运维应用实践——大数据平台架构_日志收集与分析工具Logstash

大数据Hadoop运维应用实践——大数据平台企业经典架构分析与轻量级日志收集工具Filebeat的安装配置https://blog.csdn.net/xiaochenXIHUA/article/details/163408849 一、Logstash简介与安装 1.1、Logstash的是什么?有啥用? Logstash是

2026/8/4 3:49:26 阅读更多 →
FastAPI 集成通义千问(Qwen)实战 Day1:非流式调用与 SSE 流式输出

FastAPI 集成通义千问(Qwen)实战 Day1:非流式调用与 SSE 流式输出

FastAPI 集成通义千问(Qwen)实战 Day1:非流式调用与 SSE 流式输出关键词:FastAPI、通义千问、Qwen、OpenAI 兼容协议、SSE 流式、Python 本文记录我在招聘系统项目里接入大模型能力的第一天:用阿里云百炼(D…

2026/8/4 3:49:26 阅读更多 →
重磅!商标注册成功后的监测与维护服务你了解吗?

重磅!商标注册成功后的监测与维护服务你了解吗?

重磅!商标注册成功后的监测与维护服务,你了解吗?“商标注册证终于拿到手了,这下可以高枕无忧了!”如果你也这么想,可能正在犯一个大多数创业者都会犯的错误——拿到注册证,只是品牌保护这场马拉…

2026/8/4 3:49:26 阅读更多 →
PICAXE编程进阶:从输入输出到项目实战的嵌入式系统开发指南

PICAXE编程进阶:从输入输出到项目实战的嵌入式系统开发指南

1. 项目概述:从入门到实践,解锁PICAXE编程的核心技能上次我们聊了PICAXE编程的入门,搭建了环境,点亮了第一个LED,算是和这个小家伙打了个招呼。很多朋友反馈说,感觉像是刚拿到驾照,只会直行和倒…

2026/8/4 3:48:26 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →