采用 JDK 1.6_13版本,发现一个奇怪的问题。
long period =30* 24 * 60 * 60 * 1000;
System.out.println("30 * 24 * 60 * 60 * 1000="+period);
执行,输出结果非常可怕。
JDK 1.6 输出结果:
30 * 24 * 60 * 60 * 1000=-1702967296
JDK 1.5 输出结果:
30 * 24 * 60 * 60 * 1000=-1702967296
难道是Java的BUG吗?我很难相信,Java在处理这么简单的事情,居然会有BUG。
我将以上测试代码,稍微调整之后,如下
long period = 24 * 60 * 60 * 1000;
System.out.println("24 * 60 * 60 * 1000=" + period);
period *= 30;
System.out.println("30 * 24 * 60 * 60 * 1000=" + period);
JDK1.6输出如下结果:
24 * 60 * 60 * 1000=86400000
30 * 24 * 60 * 60 * 1000=2592000000
JDK1.5输出如下结果:
24 * 60 * 60 * 1000=86400000
30 * 24 * 60 * 60 * 1000=2592000000
调整后,Java的处理结果完全正确。
再次调整代码,如下:
long period = 30l * 24 * 60 * 60 * 1000;
System.out.println("30l * 24 * 60 * 60 * 1000=" + period);
输出:
30l * 24 * 60 * 60 * 1000=2592000000
输出结果正确。
总结如下:
Java在处理连续乘法或除法时,最好注明数字的类型,否则可能会得到不正确的结果。
分享到:
相关推荐
在这个“java 计算器(可连续计算)”项目中,我们可以看到几个关键的类: 1. `Computer.java`:这个类很可能是主程序,它可能包含了用户输入的处理和后缀表达式求值的核心逻辑。可能会有一个方法用于接收用户的输入...
2. **解析输入**:程序需要能够解析用户的输入,将连续的字符流转化为可执行的数学表达式。这通常涉及到字符串处理和正则表达式。 3. **计算逻辑**:这部分代码处理数学运算,包括加法、减法、乘法、除法,以及可能...
3. 哈希查找:通过哈希函数快速定位目标,但可能遇到哈希冲突问题。 三、图算法 1. 广度优先搜索(BFS):用于遍历或搜索树或图,按层进行访问。 2. 深度优先搜索(DFS):沿着某一条路径深入搜索,直至无法继续,...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
遇到右括号“)”,连续弹出栈顶操作符直至遇到左括号,然后将这一对括号内的计算结果压回堆栈。 3. 当遍历完所有字符后,栈中应仅剩一个元素,即最终的计算结果。 这个过程涉及到了栈的应用、字符处理、优先级判断...
5. **运算符优先级**: 计算器需要处理运算符的优先级问题,例如,乘法和除法先于加法和减法执行。这通常通过栈(stack)数据结构实现,运算符被压入栈中,遇到较高优先级的运算符时,会弹出栈顶元素进行计算。 6. *...
Java计算器的实现是一个经典的编程练习,它涉及到基本的编程概念,如输入/输出处理、条件判断、循环控制以及算术运算。...通过深入学习和实践,不仅可以掌握Java语言,还能锻炼解决问题的能力和逻辑思维。
在九九乘法表中,`print`方法可能用于连续输出数字,而`println`用于在每行结束时换行。 3. **数组**: - 数组是一种数据结构,用于存储相同类型的多个元素。虽然在这个例子中不一定使用数组,但理解如何创建和...
在这个计算器程序中,我们可能会遇到整型(int)和浮点型(float/double)数据类型,用于存储计算结果。例如,我们可以声明变量`int num1`, `int num2`来存储两个操作数。 2. **用户输入** 在Java中,用户输入通常...
遍历运算子集合,优先运算乘法和除法(遇到乘法除法的时候,移除运算子,并计算) * 4.之后剩下的就是加法和减法,依次遍历计算 * 5.如果有括号的情况,递归调用 * 计算的核心思路 * 从运算子集合中取出一个运算子 * ...
4. **处理左结合和右结合**:对于左结合的运算符,如加法和乘法,当栈顶运算符优先级等于当前运算符时,需要连续弹出栈顶运算符直到栈顶运算符优先级低于当前运算符。对于右结合的运算符,如赋值运算符,处理方式略...
本项目“java Gui 做的计算器”就是利用Java的Swing或JavaFX库来实现一个基本的计算器应用,它具备了计算器的基础运算功能,包括加法、减法、乘法、除法以及一些辅助操作,如取反数、清零和退格等。 首先,我们需要...
通过这个项目,初学者可以全面了解Java编程的基本元素,同时提高解决问题和逻辑思维的能力。随着对Java和GUI编程的理解加深,可以进一步优化代码结构,使用更高级的技术,如多线程、 Swing/AWT的高级特性等。
7. **实验报告**:实验报告应包括设计的目标、所采用的技术、代码结构分析、遇到的问题及解决方案,以及对项目的反思和改进建议。这部分可以帮助学生总结学习成果,提升问题解决能力。 通过这个Java课程设计,学生...
5. **异常处理**:在执行计算过程中,可能会遇到除以零或输入非法字符的情况,需要捕获这些异常并给出友好的提示信息。 6. **格式化显示**:为了保持计算器的用户体验,计算结果显示需要进行适当的格式化。例如,...
这个计算器程序具备基本的数学运算能力,包括加法、减法、乘法、除法、开根号以及取余数,而且允许用户进行连续运算,无需在每次操作后手动输入新的数字或运算符。 首先,我们需要了解Java编程的基础。Java是一种跨...
在实际项目中,可能会遇到非线性问题。这时,可以使用扩展卡尔曼滤波(EKF)或者无迹卡尔曼滤波(UKF)来处理。扩展卡尔曼滤波是通过线性化非线性系统来近似应用卡尔曼滤波,而无迹卡尔曼滤波则采用随机采样方法来...
通过这个项目,学生可以复习Java语言的基础知识,如类、对象、方法、变量等,并学习如何将这些理论知识应用于实际问题的解决。 课程设计的目标主要有三个方面:一是复习和巩固Java语言的基础知识,二是提供动手实践...
这个名为"Calculator"的程序很可能包含了一个或多个类,这些类实现了基本的数学运算,如加法、减法、乘法和除法。下面将详细讨论涉及的知识点。 1. **Java基础知识**: - **类与对象**:计算器程序通常会定义一个`...