Java 基本数据类型相关问题总结

2018-08-22  本文已影响12人  07120665a058
int * int 可能会超过int的最大值,所以应该转为更长整型 long
判断溢出的方法:Math.addExact(left, right)
源码:
int r = x + y;
if (((x ^ r) & (y ^ r)) < 0) {
  throw new ArithmeticException("integer overflow");
}
只有当 x y 是同符号的时候才可能会溢出(x 和 y 的符号都跟 r 不一样)
<< :左移运算符,num << 1,相当于num乘以2
>> :右移运算符,num >> 1,相当于num除以2
>>>:无符号右移,忽略符号位,空位都以0补齐
举例: 1000 …….. 1000
不带符号位(整体右移1) >>>:0100 ……0100
带符号位(符号位不动)>>:1000 …….. 0100
long * int = long 只要其中一个是 long,结果就为 long
double * float = double
short * short = int 
final int number = Math.round();
floor  向下取整
ceil   向上取整
round  四舍五入取整(只根据小数点后一位来判断)
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
INFINITY:表示无限,乘以 0 等于NAN,做其他运算结果还是无限
public static final double NaN = 0.0d / 0.0;
NAN:表示非数字,和谁都不相等,也不等于自己
举例:assertFalse(Double.NaN == Double.NaN);

https://www.cnblogs.com/zhisuoyu/p/5314541.html

boolean:false
int / short / byte / long:0
char:'\u0000'
double:0.0d
float:0.0f
long:0L
String:null
Object:null
byte —— 1字节 —— 1*8   
short —— 2字节 —— 2*8    
int —— 4字节 —— 4*8 

long —— 8字节 —— 8*8

float —— 4字节 —— 4*8 
double —— 8字节 —— 8*8 
char —— 2字节 —— 2*8 ——无符号              
boolean —— 1字节 —— 1*8  
UTF-8:1 / 2 / 3
UTF-16:2 / 4
UTF-32:4
括号 > 单目 > 算术 > 关系 > 位 > 逻辑 > 条件 > 赋值
`^` 异或运算符,相同为0,不同为1
`~` 非运算符,按位取反
优先级:`~` > `&` > `|`
`||` :只要满足第一个条件,后面条件就不再判断
 `|` :要对所有的条件都进行判断

参考文章
Java &、&&、|、||、^、<<、>>、~、>>>等运算符
Java运算符优先级整理

上一篇下一篇

猜你喜欢

热点阅读