1.数据类型转换(必须拥有一致的数据类型)
①自动转换(小转大)
自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型 。
PS:范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int,大致转换规则为byte、short、char——>int——>long——>float——>double
public static void main(String[] args){
byte b1=1;
byte b2=2;
byte b3=1 + 2;
byte b4=b1 + b2;
System.out.println(b3);
System.out.println(b4);
}
分析: b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。 反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。
②强制转换(大转小)
将取值范围大的类型 强制转换成 取值范围小的类型 。 比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
转换格式:数据类型 变量名 = (数据类型)被转数据值;
public static void main(String[] args) {
//short类型变量,内存中2个字节
short s = 1;
/*
出现编译失败
s和1做运算的时候,1是int类型,s会被提升为int类型
s+1后的结果是int类型,将结果在赋值会short类型时发生错误
short内存2个字节,int类型4个字节
必须将int强制转成short才能完成赋值
*/
s = s + 1;//编译失败
s = (short)(s+1);//编译成功
}
③原码、反码、补码
正数:三码相同。
负数:原码:任意数(正数)除以2取余。(倒取)
反码:原码除最高符号位不变其余位置取反。
补码:反码加1
十进制常数160的原码、反码、补码为1010 0000
反码:1001 1111( 补码-1)
原码:1110 0000(反码取反)
-(1*2^6+1*2^5)=-96
2.运算符
①算数运算符
②比较运算符
③逻辑运算符
public static void main(String[] args) {
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false,右边不计算
System.out.println(false || false);//falase
System.out.println(false || true);//true
System.out.println(true || false);//true,右边不计算
System.out.println(!false);//true
}
位运算符:
& | | | ^ | ~ | << | >> | >>> |
有0则0 | 有1则1 | 相同则0,不同则1 | 按位取反 | 左移 | 右移 | 无符号右移 |
左移:空位补0,被移除的高位丢弃。
注:当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
右移:被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1空位1
无符号右移:被移位二进制最高位无论是0或者是1,空缺位都用0补。
0000 0101(5原反补)
1000 0011(-3原)
0000 0011(3原)
1111 1100(-3反)
1111 1101(-3补)
例:5|-3 1111 1101(补)——>1111 1100(反)——>1000 0011(原)——>-3
5^-3 1111 1000(补)——>1111 0111(反)——>1000 1000(原)——>-8
~-3 1111 1101(补)——>0000 0010(取反)——>三码合一——>2
④赋值运算符
⑤三目运算符
三元运算符格式: 数据类型 变量名 = 布尔类型表达式?结果1:结果2
3.方法的定义与调用
①定义
定义格式:
修饰符 返回值类型 方法名 (参数列表){
代码...
return ;
}
定义格式解释:
-
修饰符: 目前固定写法 public static 。
-
返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。(八大基本数据类型)
-
方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法
-
参数列表: 目前无参数, 带有参数的方法在后面的课程讲解
-
return:方法结束。因为返回值类型是void,方法大括号内的return可以不写
②方法调用
public class Test7 {
public static void main(String[] args) {
printNum();
}
public static void printNum(){
float f1=12345.01f;
float f2 = 12345.00f;
float var1 = f1 >= f2 ? 12456 : 12456.02f;
float var2=var1+1024;
System.out.println("var1的值为:" + var1 + "var2的值为:" + var2);
}
}
注:方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在主方法中,直接写要调用的方法名字就可以调用了。