目录
2.JAVA的变量创建:
3.类型转换
4.类型提升
5. 字符串类型
6.算术运算符
7. 关系运算符和逻辑运算符
8.位运算符
9.移位运算:
1.数据类型
基本数据类型:
JAVA有以下八种基本数据类型:

引用数据类型:
比如:
数组,String,类,接口......
值得注意的是:
1.无论在32位机器还是在64位机器上。Java的八种数据类型所占字节都是固定的。
2.整型默认为 int 类型,浮点型默认为 double 类型。
2.JAVA的变量创建:
在 Java 中,数字字面量默认为 int 类型。当一个数值超出了 int 类型的范围时,需要使用 long 类型来存储它。为了明确指定一个数值是 long 类型,需要在数值后面加上字母 L(大写或小写都可以)。

并且,局部变量使用之前一定要初始化,不然编译会报错!

浮点型默认为 double 类型,如果想要 float 类型的变量,要在数字后面加上F

3.类型转换
自动类型转换:
变量字节小的类型自动转换成大的字节类型。

a = b;
编译报错,long的范围比int范围大,会有数据丢失,不安全。
b = a;
a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值。

f = d;
double表示数据范围大,直接将 float 交给 double 会有数据丢失,不安全 。
d = f;
编译器会将 f 转换为 double ,然后进行赋值。

byte b1 = 100;
编译通过,100没有超过byte的范围,编译器自动将100转换为byte
byte b2 = 257;
编译失败,257超过了byte的数据范围,有数据丢失。
强制类型转换:

这里把 b 赋值给 a 时,数据范围由大到小,我们需要强制类型转换,否则编译失败。
类型不兼容:

可以看到, 强制类型转换不一定能成功,不相干的类型不能互相转换。
4.类型提升
int与long之间:int会被提升为long

int c 那一块代码 编译出错:
a + b ==> int + long --> long + long 赋值给int时会丢失数据
long d 那一块代码 编译成功:
a + b ==> int + long ---> long + long 赋值给 long
byte与byte的运算

分析:
byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算.
正确的写法:

5. 字符串类型:
在Java中使用 String 类定义字符串类型。
注意:
String 的 s 要大写。

打印结果:

如果想打印几加几等于几,可以这样:

6.算术运算符
这里讲一些JAVA特殊的情况:
做除法和取模时,右操作数不能为0

这样是错误的。
% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

结果:
两侧操作数类型不一致时,向类型大的提升
+的左侧是int,右侧是double,在加之前int被提升为double
结果:

7. 关系运算符和逻辑运算符
Java 的关系运算符和逻辑运算符的结果都是布尔类型(boolean),只有 true 和 false两个参数,分别代表 真,假。
短路求值:
&& 和 || 遵守短路求值的规则:

结果:

计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.
注意:
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
8.位运算符
对于两个二进制的数字:
按位与 &:(对应位两个都是1才为1)
按位或 | :(对应位只要有1就是1)
按位异或 ^ :(对应位相同则为0,不同则为1)
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
9.移位运算:
左移 << :最左侧位不要了, 最右侧补 0
结果相当于乘以2
右移 >> : 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
结果相当于除以2
无符号右移 >>>: 最右侧位不要了, 最左侧补 0

被折叠的 条评论
为什么被折叠?



