存在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

转载于:https://www.cnblogs.com/open-source-java/p/11090402.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值