java 的基本数据类型有8个,比葫芦娃还多一个。分别是byte(1字节),short(2)、int(4)、long(8),float(4)、double(8),boolean(2),char(2)。
java 是强数据类型语言,不同的数据类型(要具有相同形式)之间可以互相转换,低转高是自动类型转换,一般不会出问题,高转低需要强制转换,会出现溢出的情况。拿最简单的 byte 和 short 的相互转换举例,byte 取值范围-128至127,short 取值范围-32768至32767,如果 short 等于500,强转 byte,得到-12,跟我们预期不符合,说一说-12这个值怎么得来的。
// 强制类型转换, 高转低
short a = 500;
byte b = (byte)a; //b = -12
500/256=1余244 | 244/128=1 余116 | 116/64=1余52 | 52/32=1余20 | 20/16=1余4 | 0 | 4/4=1余0 | 0 | 0 | |
---|---|---|---|---|---|---|---|---|---|
… | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
如上面的二进制表格,short 是16 bit,byte 是 8 bit,500转化的时候,根据二进制计算得到111110100,然后从第8位128那里截断,得11110100,二进制高位是符号位,符号位为0即为正数,1即为负数,这时将二进制位对应的值相加-128 + 64 + 32 + 16 + 4 = -12。
++ 递增、-- 递减符号运用:
int i = 0;
System.out.println(i ++); // 0, 先使用再赋值
System.out.println(++ i); // 1
if(i++ > 0) {
//先计算i > 0,i 再+1,所以值为 false,条件不执行
}
int、double 转换的计算:
int a = 1, b = 2;
double k1 = a / b; // 0.0
double k2 = (double)a / b; // 0.5
double k3 = (double)(a / b); // 0.0
double k4 = ((double) a) / b; // 0.5
double k5 = (a + 0.0) / b; // 0.5
double c = a; // 1.0
double d = b; // 2.0
double k6 = c / d; // 0.5
k2、k4、k5、k6都实现了目的,有意思的地方是k4,a 为 int, 转 double 是自动的,这里加了个强转符号值得商榷。还有k2、k4似乎是相同写法,但一般写成k4,比较保险,不容易出错。
+ 是运算符,也是连接符号。
System.out.println(5 + 5 + "a"); // 10a
System.out.println("a" + 5 + 5); // a55
可以看到程序执行是有次序的。如果 + 号一边是字符串,则当连接符使用,不要先入为主导致出错。
好啦,基本数据类型的概念值得记录的大概就这么多。