目录
1.1byte
1.2short
1.3int
1.4long
1.5flout
1.6double
1.7char
1.8boolean
2.String
数据类型转换
3.1相互赋值
3.2强制类型转换
3.3数值提升
3.4int和String相互转换
运算符
4.1算术运算符
4.2关系运算符
4.3逻辑运算符
4.4位运算符
4.5移位运算符
4.6条件运算符
4.7运算符小结
1.1byte
字节型,顾名思义,占1个字节
表示范围:-2^7~2^7-1
初始值:0
定义变量
byte a=3;
1.2short
短整型,占2个字节
表示范围:-2^15~2^15-1
初始值:0
short b=3;
1.3int
整形,占4个字节
表示范围:-2^31~2^31-1
初始值:0
int c=3;//int类型比较常见
1.4long
长整型,占8个字节
表示范围:-2^63~2^63-1
初始值:0
long d=3L;//后面跟个L,小写l也可以,但有时候会和1混淆,建议大写的L
1.5flout
单精度浮点型,占4个字节
精度相对低,不推荐使用,在内存中的布局遵守IEEE 754标准
初始值:0.0
float e=1.2333f//非要用float,后边加个f
1.6double
双精度浮点型,占8个字节
精度高,能够满足大部分场景的使用,同样遵守IEEE 754标准
精度高不代表绝对的准确,这只是用有限的位数表示可能无限的小数
初始值:0.0
double g=2.333;
1.7char
字符型,占2个字节(注意和C区分)
C中的字符是ASCII码表示的,而Java中的字符是Unicode表示的
一个字符占两个字节,所能表示的字符也更多
初始值:空
char handsome='我';//编译时可能会出错,javac -encoding UTF-8即可 char 钱=5;//可以这么定义但是,不建议,合法但不合理
1.8boolean
布尔型,具体大小没有明确规定
取值:只能是true或者false
初始值:false
不能对boolean型变量进行+1操作
2.String
字符串类型,用双引号+若干字符表示,属于引用类型
字符串拼接
String str="result=" int a=10; int b=20; System.out.println(str+a+b); //result=1020 //str+a之后变成:“result=10”这是个字符串,+b进行字符串拼接 String str="result=" int a=10; int b=20; System.out.println(a+b+str); //30result= //执行a+b,因为都是int,会计算出结果。+str进行字符串拼接
数据类型转换
3.1相互赋值
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.
范围大的类型变量给范围小的类型变量:编译通不过,直接报错
3.2强制类型转换
强转损失精度
互不相干的类型之间无法强转
3.3数值提升
范围小的范围大的变量进行运算,小的会被提升为大的
3.4int和String相互转换
//int转成String
int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);
//String 转成 int
String str = "100";
int num = Integer.parseInt(str);
运算符
4.1算术运算符
4.1算术运算符
基本四则运算+ - * / %
增量赋值运算+= -= *= /= %=
自增++/自减--(前置和后置)
- 在表达式不需要返回一个值时,前置和后置没有区别
int/int 结果还是int,为了不出错,建议用double定义变量
0不能做除数
%不仅可以对int取模,还可对double取模
System.out.println(7.3 % 1.4);///结果为0.3
4.2关系运算符
== !=
< >
<= >=
关系运算符的表达式返回值都是 boolean 类型.
所以C语言那一套if(!0)行不通了
4.3逻辑运算符
&& || !
&&逻辑与:两个操作数都为true,整体结果才为true,有false则为false
||逻辑或:两个操作数都为false,整体结果才为false,有一个为true则为true
- &&和||都可以短路
只要第一个操作数能让整体结果确认,则不会判断剩下的操作数
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.
结论:
- 对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式.
- 对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式
!逻辑非:!true==false;!false==true;(!是一个单目操作符,只有一个操作数)
- 当操作数为boolean型,& 和 | 也表示逻辑运算,只不过不支持短路,上述两行代码把相应的&&和||替换为&和| 程序会异常
4.4位运算符
位运算符对数据处理的最小单位是二进制位
& 按位与:对应二进制位都是1,才为1;有一个为0,则为0;
| 按位或:对应二进制位都是0,才为0;有一个为1,则为1;
- 当操作数为boolean型,& 和 | 表示逻辑运算
~ 按位取反:
int a = 0xf;
System.out.printf("%xn", ~a);//fffffff0
System.out.printf("%dn", ~a);//-16
//看到第一个结果有点懵,才反应过来,负数在内存的是补码
^按位异或:(找不同)对应二进制位相同为0、不同为1;
4.5移位运算符
- 移动二进制位
- 移位位数过大没有意义:int占32位,你不能给移位33位,可是可以,但是没有意义
左移<<:高位补符号位;相当于得到的结果相当于原结果乘2*N
(N为移动位数)
右移>>:低位补0;相当于得到的结果相当于原结果除2*N
无符号左移>>>:左移后高位补0;不管是正数还是负数,都补0;
4.6条件运算符
只有一个条件运算符,三目运算符
表达式1?表达式2:表达式3 int max=a>b?a:b;//判断两个数的最大值
4.7运算符小结
- % 操作在 Java 中可以针对 double 来计算.
- 需要区分清楚 前置自增 和 后置自增之间的区别.
- 由于 Java 是强类型语言, 因此对于类型检查较严格, 因此像 && 之类的运算操作数必须是 boolean.
- 要区分清楚 & 和 | 什么时候是表示按位运算, 什么时候表示逻辑运算.
整体来看, Java 的运算符的基本规则和 C 语言基本一致.



