java 解惑系列

谜题一:数据运算的小问题

  1)当问题需要精确答案的时候,要避免使用float 还有double类型,要使用int long BigDecimal类型。这是因为在java虚拟中运算的时候并不是所有的小数都可以表示成二进制的浮点数的精确表示。因此在做商业计算的时候(类似银行计算的时候)推荐使用BigDecimal  当然构造的时候也不要传递一个double类型 用字符串代替。

  2)常整除。对于多个数相乘的过程:long x =24*60*60*1000*1000 在这个运算的过程中会造成int 类型的溢出,因为java不具有目标确定类型的特性所以在两个int类型的数相乘的话还是会得到一个int类型 因此在最后才会才会转为long 但是在此时的运算的过程中早已溢出 所以得到的结果会不准确。解决办法 第一个操作数为目的类型。

时间: 2024-07-31 07:51:19

java 解惑系列的相关文章

JAVA面试题解惑系列(七)——日期和时间的处理

日期和时间的处理不仅在面试题中会考到,在实际项目开发中也是我们经常需要处理的问题,似乎没有哪个项目可以避开它们,我们常常在处理用户的出生年月日.注册日期,订单的创建时间等属性时用到,由此可见其重要性. java.util.Date类 提到日期和时间,我想大家最先想到应该是java.util.Date类吧.Date类可以精确到毫秒数,这个毫秒数是相对于格林威治标准时间"1970-01-01 00:00:00.000 GMT"的差值.那么,什么是格林威治标准时间呢?要回答这个问题,我们需要

【java解惑】前缀自增自减和后缀自增自减问题

    如下代码: public class Example025 { public static void main(String[] args) { int ape = 100; int it = 100; int ape_it = 100; for (int i = 0; i < 100; i++) { ape--; it = it--; ape_it = --ape_it; } System.out.println("ape = " + ape); System.out.

【java解惑】重载构造函数

如下所示代码: public class Example046 { private Example046(Object o) { System.out.println("Object"); } private Example046(double[] dArray) {//2 System.out.println("double array"); } private Example046(String str) {//3 System.out.println(&quo

【java解惑】移位运算符规则

    如下代码: public class Example027 { public static void main(String[] args) { int i = 0; while (-1 << 32 != 0) { i++; } System.out.println(i); } }     结果说明:     将上述程序放到eclipse中,在输出行会有提示"Unreachable code".也就是while循环是死循环无法退出.     结果分析:     Ja

【java解惑】java编译器对空final赋值的妥协

如下所示代码: public class Example038 { private final static String GUEST_ID = "ape_it"; private final static String ID; static { try { ID = getID(); } catch (GetIDException e) { ID = GUEST_ID; e.printStackTrace(); } } private static String getID() th

【java解惑】&和&&、|和||使用

如下所示代码: public class Example042 { public static void main(String[] args) { int[][] tests = { { 6, 5, 4, 3, 2, 1 }, { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 } }; System.out.println("func1 out : " + func1(tests)); } private static int func1(int[

【java解惑】try-finally语句执行问题

如下所示代码: public class Example039 { public static void main(String[] args) { Example039 example039 = new Example039(); System.out.println(example039.output1()); example039.output2(); } boolean output1() { try { // ... return true; } finally { return fa

【java解惑】关于异常捕获的三条要求

有如下所示代码: public class Example037 { static void output1() { try { System.out.println("如果一个 catch 子句要捕获一个类型为 E 的被检查异常," + "而其相对应的 try 子句不能抛出 E 的某种子类型的异常,那么这就是一个编译期错误"); } catch (IOException e) { System.out.println(""); } } stat

【java解惑】java字符串替换方法使用

    如下代码: public class Example020 { public static void main(String[] args) { String separator = File.separator; String clazzName = Example020.class.getName(); String rs1 = clazzName.replace(".", separator); // 方法1 String rs2 = clazzName.replaceA