结果:
false
false
true
SMALL
MEDIUM
原因:枚举是特殊的类,他的每一个枚举值都是类的实例,LARGE两者指向不同内存地址,因此结果为 false 。isPrimitive() 用于判断是否为原始类型,因此结果为 false 。
结论:枚举的核心特性为单例性和可遍历性
2.
结论:这其实并不意外,因为在计算机中,浮点数(如 double 类型)是采用二进制来表示的。而有些十进制的小数,在转换为二进制时,是无法精确表示的。当进行浮点数运算时,这些微小的不精确就会累积,从而导致最终结果出现微小的误差,就像代码中 0.05 + 0.01 和 1.0 - 0.42 的结果并非我们直观预期的 0.06 和 0.58 ,而是带有微小偏差的值;而 4.015 * 100 和 123.3 / 100 能得到相对精确的结果,是因为这些运算对应的二进制表示在计算时误差没有体现出来或者可忽略。
代码:import java.math.BigDecimal;
public class TestBigDecimal {
public static void main(String args[]) {
BigDecimal bd05 = new BigDecimal("0.05");BigDecimal bd01 = new BigDecimal("0.01");System.out.println("0.05 + 0.01 = " + bd05.add(bd01));BigDecimal bd10 = new BigDecimal("1.0");BigDecimal bd42 = new BigDecimal("0.42");System.out.println("1.0 - 0.42 = " + bd10.subtract(bd42));BigDecimal bd4015 = new BigDecimal("4.015");BigDecimal bd100 = new BigDecimal("100");System.out.println("4.015 * 100 = " + bd4015.multiply(bd100));BigDecimal bd1233 = new BigDecimal("123.3");System.out.println("123.3 / 100 = " + bd1233.divide(bd100));
}
}
上述代码可解决精度问题
应用了字符串来初始化数组
3.
输出结果:
第一行输出: X+Y=100200
第二行输出: 300=X+Y
原因:在 Java 中, + 运算符在字符串拼接和数值运算时的行为不同,具体取决于操作数的类型:对于 System.out.println("X+Y="+X+Y); :字符串 "X+Y=" 是字符串类型,当它与后面的 X ( int 类型,值为 100 )进行 + 运算时,会触发字符串拼接操作,先将 X 转换为字符串 "100" ,得到 "X+Y=100" 。接着,这个新的字符串再与 Y ( int 类型,值为 200 )进行 + 运算,再次触发字符串拼接,将 Y 转换为字符串 "200" ,最终拼接成 "X+Y=100200" 。对于 System.out.println(X+Y+"=X+Y"); :
首先计算 X + Y , X 和 Y 都是 int 类型,所以这里是数值相加, 100 + 200 = 300 。得到结果 300 ( int 类型)后,再与字符串 "=X+Y" 进行 + 运算,此时触发字符串拼接,将 300 转换为字符串 "300" ,然后与 "=X+Y" 拼接,得到 "300=X+Y" 。
结论: + 运算符中,若有一个操作数是字符串,则进行字符串拼接;若操作数都是数值类型,则进行数值运算,运算顺序会影响最终结果。