008、关键字、数据类型及常量

Par @Martin dans le
Tags :

1. 关键字

老生常谈, 不多说了…

2. 数据类型

2.1

在 Java 的领域里, 基本数据类型变量存的是数据本身, 而引用类型变量存的是保存数据的空间地址(和指针有点像).

char 类型在 C/C++ 和 java 中所占字节是不同的, 因为编码不同, 在C/C++中, 占 1Byte, 而在 java 中占 2byte.

另外, boolean 类型也有点小意思, 它可以占 1 byte, 也可以占 4 byte, 如果它是一个单独的变量类型, 它占 4 byte, 如果它是数组中的一个元素, 那么它占 1 byte.

整数默认是 int 型, 小数默认是 double 型.

Java 是强类型语言, float f = 2.5, 这样编译是通不过的, float f = 2.5f 才可以.

2.2 自动类型转换

又叫自动类型提升, 当放生运算时, 低字节将被提升到高字节类型.

  • 所有的 byte、short、char 类型将被提升成 int 型;
  • 如时有一个操作数是 long, 计算结果是 long;
  • 如时有一个操作数是 float, 计算结果是 float;
  • 如时有一个操作数是 double, 计算结果是 double;
byte b1, b2, b;
b1 = 1;
b2 = 2;
b = b1 + b2; // 报错

这段代码会报错, 原因就是因为放生运算时, byte 类型被提升成 int 型, 将 int 型赋给 b 肯定会报错.

byte s = 2;
int i = 10;
s = s + i;  // 报错
s += i;   // √

为什么 s += i 是对的呢?
因为 Java 编译器对 += 运算做了优化, s1+=1 相当与 s1 = short(s1+1).

2.3 强制类型转换

(void)xxx,如:(int)2.3

强制类型转换可能会造成数据的丢失, 例如, 通过强制类型转换将 75.8 赋值给 int 型变量后, 结果为 75, 数值上并未进行四舍五入, 而是直接将小数位截断.
再例如, 之前第七节笔记最后面提到的溢出也是强制类型转换引起的问题.

3.常量

和 C/C++ 中差不多, 在 Java 中可以通过 final 关键字来声明一个常量:
final 类型 常量名 = 值.