一,数据类型分类(2种)
1. 基本数据类型(3种)
数值型:
整数类型(4种):
- byte(1字节):范围(-128~127);
- short(2字节):范围(-32768~32767);
- int(4字节);
- long(8字节):若数据定义为long类型超过int范围后面 需加“L”(推荐)或“l”(默认为int,超过int范围编译将会报错,未超过则不会);
浮点类型(2种):
- float(4字节):第1位为符号位,接下来8位表示指数,再接下来23位表示尾数;若指定浮点类型为float需加“F”或“f”(默认为double,否则编译提示可能损失精度);
- double(8字节):第1位为符号位,接下来11位表示指数,再接下来52位表示尾数;
- 浮点数的形式:
- a.十进制数形式:必须包含一个小数点(1.68、168.0和 .168),否则当成int类型;
- b.科学计数法形式:只有浮点类型数值才可以使用,如1.68e2(168.0)、1.68E2和168e2(16800.0);
- 特殊浮点数:
- a.正无穷大:正数除于0.0,用Double或Float的POSITIVE_INFINITY表示,所有的正无穷大都相等;
- b.负无穷大:负数除于0.0,用Double或Float的NEGATIVE_INFINITY表示,所有的负无穷大都相等;
- c.非数:0.0/0.0,用Double或Float的NaN表示,所有的非数均不相等;
字符型:char(2字节)
布尔型:boolean(1字节)
注意: switch语句中只能接受byte、short、int和char 类型变量(JDK1.6以前的版本),JDK1.7时,又增加了String。
2. 引用数据类型
- 类(class)
- 接口(interface)
- 数组([ ])
二,基本数据类型转换(2种)
1. 自动类型转换
- 表数范围小的向表数范围大的自动转换
- 当s为short类型时。s += 4;与s = s + 4;的区别
class OperatorDemo {
public static void main(String[] args){
short s = 3;
s += 4;
System.out.println("s = " + s);
/*
s = s + 4;
System.out.println("s = " + s);
//s(short类型)与4(默认int类型),会自动提升为int类型,相加的和也为int类型,赋值给short类型的变量编译会提示损失精度
*/
}
}
2. 强制类型转换
- 语法格式:(targetType)Value
- 以下为负数的二进制相互转换示例:
class BinaryDemo {
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(128)); /*用于打印整数128的二进制 00000000 00000000 00000000 10000000 (4个字节,前面0不显示);
取反:11111111 11111111 11111111 01111111 (4个字节)
+ 1 */
System.out.println(Integer.toBinaryString(-128)); //用于打印-128的二进制 11111111 11111111 11111111 10000000 (4个字节);
byte a=1,b=2;
a = (byte)(a + 126);//a=127,强制为byte 1个字节,二进制的最高位为0,范围内;
b = (byte)(b + 126);//b=128,强制为byte 1个字节,二进制的最高位为1,超出范围,后面取反再加1,转换为负数-128;
System.out.println("a="+a+",b="+b);
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
}
}
运行结果:
三,运算符(6种)
1. 算数运算符
- 正号(+) 、负号(-)、加(+)、减(-)、乘(*)
- 除(/):整数与整数相除时,结果永远是整数,小数部分被忽略。
- 模(%):负数对正数取模结果为负数;正数对负数取模结果为正数。
- 自增(++):该运算符出现在操作数左边,操作数先自增,再参与运算;出现在右边,先参与运算再自增。
- 自减(–):该运算符出现在操作数左边,操作数先自减,再参与运算;出现在右边,先参与运算再自减。
字符串相连(+)
int a = 4,int b = 5; System.out.println("a+b="+a+b);//打印结果:a+b=45 System.out.println("a+b="+(a+b));//打印结果:a+b=9
2. 赋值运算符(13种)
- 将值赋给变量(=);
扩展后的赋值运算符:推荐使用,让程序更健壮。
+= , -= , *= , /= , %= , &= , |= , ^= , <<= , >>= , <<<= , >>>=
3. 位运算符(7种)
直接对二进制位进行运算
- 按位与(&):可用于提取某一二进制数的其中几位。
- 按位或(|)
- 按位异或(^):一个数异或同一个数两次为本身(用于数据简单加密,还可用于两个整数的交换)。
int m3=5,n3=7;
System.out.println("互换前:m3="+m3+",n3="+n3);
m3 = m3 ^ n3 ;
n3 = m3 ^ n3 ;
m3 = m3 ^ n3 ;
System.out.println("互换后:m3="+m3+",n3="+n3);
- 按位非(~):对二进制数值的每一位0变1,1变0。
- 左移运算符(<<)、无符号左移运算符(<<<):左移几位其实就是该数据乘以2的几次方。
- 右移运算符(>>)、无符号由移运算符(>>>):右移几位其实就是该数据除以2的几次幂。
4. 比较运算符(7种)
- 返回结果为boolean类型
- 符号:>、>=、<、<=、==、!=和instanceof
5. 逻辑运算符
- 符号:&&(短路与)、||(短路或)、!(非)、&(与)、|(或)、^(异或)
6. 三目运算符
- 语法格式:(expression)?(if-true-statement):(if-false-statement)
- 说明:为if else的简写,当其运算有一具体结果时,可以使用三目运算符简化。