该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上元IT培训:Java精英班企业面试题(四)
1、如何解决计算过程中精度丧失的问题?
例如:
double d1 = 3.0; double d2 = 2.9;
// 0.10000000000000009
// 因为计算机本身是二进制的,而浮点数实际上只是个近似值,
//所以从二进制转化为十进制浮点数时,精度容易丢失,导致精度下降 System.out.println(d1 - d2);
可以使用 BigDecimal 类来操作:
涉及金钱方面的计算一般都要使用该类型以提高精确度
double d1 = 3.0; double d2 = 2.9;
BigDecimal bd1 = new BigDecimal(String.valueOf(d1)); BigDecimal bd2 = new BigDecimal(String.valueOf(d2)); double d = bd1.subtract(bd2).doubleValue(); System.out.println(d);
Ø求 1000000 个 0.01 的和?
使用 BigDecimal
桐乡IT编程培训班
2、char 型变量能否存储一个汉字?为什么?
在 Java 中,char 类型占 2 个字节,而且 Java 默认采用 Unicode 编码,一个 Unicode 码 是 16 位,所以一个 Unicode 码占两个字节,Java 中无论汉字还是英文字母都是用 Unicode 编码来表示的。所以,在 Java 中,char 类型变量可以存储一个中文汉字。
3、&&和&,||和|有什么异同?
&&和&:都表示逻辑“与”
对于&&,如果有两个表达,第一个表达式结果为 false,那就不会计算第二个表达式的 值,整个表达式的值都是 false。
对于&,如果有两个表达式,无论第一个表达式的结果是 true 还是 false,都会计算第二 个表达式的值。
对于&&,具有短路逻辑
||和|:都表示逻辑“或”
对于||,如果有两个表达式,第一个表达式为 true,就不会计算第二个表达式的值,整 个表达式的值就是 true
对于|,如果有两个表达式,无论第一表达式的结果是 true 还是 false,都会计算第二个 表达式的值。
对于||,具有短路逻辑。
4、switch……case……的条件表达式支持什么类型?
JDK1.5 之前:byte/short/int/char JDK1.5 以后:新增 enum
JDK1.7 过后:新增 String 类型
5、equals 比较和==比较有什么区别?
(1)对于基本类型变量,存储的就是变量值本身,对于引用类型变量,存储的是对象的内存地址
(2)对于基本类型,==比较的就是值本身,而对于引用类型,==比较的则是内存的地址, equals()方法比较的是堆中的内容。即比较两个对象在堆中的内容是否相同。
如果一个对象没有重写 equals 方法则默认采用的还是==比较
6、while 循环和 do……while 循环的区别?
while 循环先判断再执行,do……while 循环先执行一次再判断,它们的区别体现在第一 次就不满足条件的循环中,如果不是这样,两者之间是可以相互替换的。
7、Java 中如何一次性跳出多重循环?
Java 中的 break 默认只能跳出一重循环,可以使用带标号的 break 语句跳出多重循环。
here: for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) {
System.out.println("i=" + i + ",j=" + j); if (j == 1) {
break here;
}
}
}