聊聊java数据类型那点事

java数据分为基本数据类型和引用数据类型

基本数据类型

包括 byte(一个字节)short(两个字节)char(两个字节)int(四个字节)
long(8个字节)float(四个字节)double(四个字节)boolean(一个字节);
注:一个字节=8比特 即1Byte=8bit

一般整数默认是int类型 浮点数默认是double类型;
long类型的需要在数字后面+L/l,float类型的需要在数字后面+F/f;
double小数点最小是16位、(有时候是15位,但是不论它是16位还是15位,都是毫无意义的,在实际中根本不会永double做乘除运算)
也就是

System.out.println((double)5/3);

结果1.6666666666666667

引用数据类型``

包括类(class)接口(interface)数组(a[]);

基本数据类型的转换

byte ,short,char这三种相加或者转换默认为int类型;
java按照byte,short,char,int,long,float,double这种顺序由低到高转换;
当然由低类型转高类型可以不用强制类型转换,可以直接转,而由高类型向低类型需要强制类型转换,否则编译出错,
注:一般高类型+低类型=高类型;
当然如低类型+=低类型+高类型这种情况也是真确的;

String类型转换

String s="142";
int i=Integer.parseInt(s);
s="142F";
float f=Float.parseFloat(s);
s ="142L";
Long j=Long.parseLong(s);//结果出错

补充:

计算机存储的都是二进制的补码;(二进制第一位是0的是正数,为1是负数)
正数的原码,反码,补码都是它本身,
负数的 反码是他原码取反,符号位不变,补码是他的原码取反+1,符号位不变
(符号位就是他二进制的第一位)

如 int----》char
(四字节)—》(二字节)
int i=6---------->char j
int i=6的二进制:
0000 0000 0000 0110
转化为char
第一步
取后八位 0000 0110(这个是补码)
然后求它的源码为0000 0110(正数原码就是它的反码)
所以当你system.out.print(j)的时候输出的就是0000 0110的十进制即6

数据运算

之前在网上看过这样一道题

int m=5;
int y=2;
y+=y-=m*y;
System.out.println(y);

有人说输出为-16,也有人说输出为-6;小编运行后结果为-6
可以将该表达式展开为 y=y+(y-my)即y=2+(2-52)=-6;当然
会有人这样想

y=y-m*y;
y=y+y;

他的结果就是-16,这两种是不一样的下面先说第一种,

java 取Double小数点后一位 java中double几位小数_java 取Double小数点后一位

java 取Double小数点后一位 java中double几位小数_反码_02