数据类型
一、整型变量
代码:
int num=10;
System.out.name(num);
int 整型变量占4个字节,一个字节占8个比特位。换算公式 1KB=1024Byte,1MB=1024KB,1GB=1024MB;(所以10月24日是程序员节~)
4个字节取值范围:-2^31~2^31-1;
若超出取值范围则会出现溢出的情况。
二、长整型
代码:
long a=10L(L可以小写也可以大写建议小写,因为小写l与1相似)
System.out.println(a);
长整型为8个字节,取值范围:-2^63~2^63-1
三、双精度浮点数
代码:
double a=1.0;
System.out.println(a);
双精度浮点数字节为8,但是浮点数的内存布局与整数差别很大,不能单纯以2^n形式表现。
四、单精度浮点数
代码:float num = 1.0f;
System.out.println(num);
float num=1.0f;//可以写大写也可以写小写,其中必须加上f,如果不加,1.0就会隐形转为为 double类型,程序就会报错。
字节为4,同样因为遵循 IEEE 754标准,所以不能以2^n形式计算取值范围,且表示数据的精度范围较小(一般为小数点后六位),一般都是优先考虑double。
五、字符类型
代码:char ch = 'a';
字节为2,取值范围为0~2^16-1。注意:1.java中使用 单引号+单个字母的形式表示字符字面值。2.计算机的字符本质上是一个整数,在C语言是ASCII表示字符,但在java中使用Unicode表示字符,因此占用两个字节,表示种类繁多,包括中文。
六、字节类型变量
代码:byte value= 0;
System.out.println(value);
字节为1,取值范围-128~127,(-2^7~2^7-1).注意:字节类型与字符型互不相干。
七、短整型变量
代码:short value = 0;
System.out.println(value);
字节为2,取值范围-32768~32767(-2^15~2^15-1),因为其取值范围较小,一般不推荐使用。
八、布尔类型变量
代码:boolean value = true;
System.out.println(value);
boolean类型有些JVM的实现是占1个字节,有些占一个比特位,没有明确规定。 变量有两种取值:true为真,false为假,且布尔类型与int类型不能相互转换,不存在1为true,0为false的用法。
九、字符串类型变量
代码:
java使用双引号+若干字符的方式表示字符串字面值,和上面的基本数据类型不同,String是引用类型。字符串中的一些特定的不太方便直接表示的字符需要进行转义。其中的“+”代表执行字符串拼接。
类型转换
一、隐形转换
int和long/double相互赋值
代码: int a = 10;
long b = 20;
a = b;//可以通过
b = a;//不能通过
double c = 20;
c = a;//能通过
a = c;//不能通过
结论:不同类型赋值时范围小的可以隐形转为范围大的进行赋值,反之不行。
int与boolean相互赋值
代码: int a = 10;
boolean b = true;
b = a;//出错
a = b;//出错
结论:int与boolean是不相干的类型,不能相互转换。
int字面常量与byte赋值
代码: byte a=100;//编译通过
byte b = 130;//编译不能通过
结论:使用字面常量赋值是java会自动校验,判断赋值是否合理
二、强制转换
代码:int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b=true;
b=(boolean)a;//编译出错
结论:强制类型转换可能会精度丢失,如上面代码 b赋值给a小数点被忽略成为10;
类型不同是无法强制转换。
数值提升
一、int与long混合运算
代码:int a = 10;
long b = 20;
int c = a + b;//编译出错
long d = a + b;//编译通过
结论:在int与long混合运算时,int会自动提升为long,结果为long,若要用int接收,则需要强制转换。
二、byte与byte运算
代码:
结论:byte与byte运算是相同类型但出现报错,是因为在运算时byte会提升为int类型再进行赋值为ibyte会出现出错。
类型提升小结:1.不同类型混合运算时,范围小的会提升为大的
2.字节小于4的,在运算时会提升为4个字节的int再进行运算。
三、int与String相互转换
int转化为String
代码:
四、String转int
代码:
运算符
一、算术运算符
基本四则运算 + - * % /
主要注意除法
int/int结果还是int,若需要小数则需使用double计算
其中0不能作为除数
%表示取余运算,不仅可以对int取模还可以对double取模
增量赋值运算 +=,-=,/=,%=,*=
结论:如果取表达式的返回值,则前自增的返回值就是自增后的值,后自增就是自增前的值。
二、关系运算符
主要有以下六个:== != < > <= >
代码
三、逻辑运算符
逻辑运算符主要有三个:&&,||,!
1.逻辑与&&
规则:两个操作数为true时,结果为true,否则结果为false
2.逻辑或 ||
规则:两个都为false,结果为false,否则为true
3.逻辑非 !
规则:操作数为true时,结果为false,操作数为false时,结果为true
4.短路
&&和||遵守短路求值的规则
代码:
System.out.println( 10 > 20 && 10/0 == 0)//打印false
System.out.println( 10 < 20 || 10 / 0)//打印true
都知道 10/0 出现程序会报错,但是代码正常运行,说明 10/0 并没有真正被求值
结论:&& 若左侧表达式为false ,则整体为false 无需计算右侧表达式
|| 若左侧表达式为true,则表达式的整体为true,无需计算右侧式子
5.&与|
如果&与|操作数为boolean时也可以表达逻辑运算但是没有短路求值
四、位运算
主要有:& | ~ ^
位操作表示二进制运算,计算机中的数据是由二进制表示,按位运算就是按照二进制位的每一位进行计算
按位与 &:
两个二进制都为1时,则结果为1,否则为0
按位或 |:
两个二进制只要有一个为1 ,则结果为1,否则为0
注意:当 &和 |操作数为整数时则表示按位运算,若为boolean时则表示,表示逻辑运算
按位取反 ~:如果为0,则为1,如果为1,则为0
五、移位运算
主要有三个: << >> >>>
<<:左移,最左位不要,最右侧补0
右移>>:最右侧不要,左侧依据符号位补(正数补0,负数补1)
无符号右移>>>:最右侧不要,最左侧补0
总结:向左移动n相当于原数字乘以*2^n,向右移动相当于原数字除以2^n。
六、条件运算符
表达式1?表达式2:表达式3
总结:当表达式1的值为true时,执行表达式2,为false时执行表达式3。
小结:%在java中在double中也能运算
区分前置自增和后置自增的区别
对于&&之类必须是逻辑运算
要区分&与|什么时候是逻辑运算什么时候是按位运算