存在i == i+1吗,j != j吗,i+1<i吗,i != 0 && i == -i吗?Math.abs()可能为负数吗?
@Test
public void testInteger() {
Integer a = 50;
Integer b = 50;
Integer c = 150;
Integer d = 150;
System.out.println(a==b);
System.out.println(c==d);
}
true
false
------------------------------------------------------------------------------------------------------------------------------
JAVA编译器编译Integer a = 50的时候,被翻译成-> Integer a = Integer.valueOf(50);
而valueOf
的源码是下面这样的
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
看到了嘛,Integer内部有一个IntegerCache缓存。对于值范围在-128到127之间的数,会进行缓存。因此a和b范围在-128到127之间,所以指向的是同一个对象,所以判断结果是true
。而c和d在128之外,所以每次都是返回一个新对象,所以判断结果是false
。
------------------------------------------------------------------------------------------------------------------------------
@Test
public void testIJMATHABS() {
System.out.println(Integer.MIN_VALUE);
System.out.println(Math.abs(Integer.MIN_VALUE));
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MAX_VALUE + 1);
System.out.println(Integer.MAX_VALUE + 1 < Integer.MAX_VALUE);
double i = Double.POSITIVE_INFINITY;
System.out.println(i == i+1);
double j = Double.NaN;
System.out.println(j != j);
}
-2147483648
-2147483648
2147483647
-2147483648
true
true
true
------------------------------------------------------------------------------------------------------------------------------
Math.abs(Integer.MIN_VALUE))
的结果是正数还是负数?"
"Math.abs
是绝对值运算,结果应该是正数吧。"
"不对,还是负数。Integer的范围为-2147483648~2147483647。不过我们先来看一眼abs
函数的源码,如下所示"
public static int abs(int a) {
return (a < 0) ? -a : a;
}
"看了源码,其实很明显,绝对值运算的原理是判断这个数是否大于零,如果小于零则取负值。OK,回到我们题目。Integer.MIN_VALUE
,它的十六进制表示是 0x80000000。其符号位为1,其余所有的位都是0。取负数(反码+1)则为 0x7fffffff+1,也就是 0x80000000。你会发现对Integer.MIN_VALUE
取负值还是本身。因此,结果还是负数。"
Short num =(short)Math.abs(Short.MIN_VALUE)); System.out.println(num);
------------------------------------------------------------------------------------------------------------------------------
"好像,之前我有看到一个题目是这样的。是否存在一个数i,可以使得i+1<i
,这样看来,这个i就是Integer.MAX_VALUE
,因为加完1就溢出了变为负值了。"
------------------------------------------------------------------------------------------------------------------------------
是否存在一个数,满足i != 0 && i == -i
其实还是Integer.MIN_VALUE
,原因说过了!
------------------------------------------------------------------------------------------------------------------------------
浮点奥秘
无穷大加一个常数还是无穷大
无穷大减去一个常数也是无穷大
------------------------------------------------------------------------------------------------------------------------------
有一个不是数值的值,它就是NaN
,翻译过来就是(Not a Number)
参考链接:https://www.cnblogs.com/rjzheng/p/10910834.html#4266058