数据类型转换
自动转换
自动转换:将取值范围小的类型 自动提升为取值范围大的类型
例如:一个int类型变量和一个byte类型变量进行加法运算,结果会返回什么类型呢?
packageday02;public classday02_1 {public static voidmain(String[] args) {int a = 1;byte b = 2;int sum0 = a+b;//当写byte sum1的时候 程序会报错 提示无法兼容 因为int超过了byte类型的长度//byte sum1 = a+b;
System.out.println(getType(a));//class java.lang.Integer
System.out.println(getType(b));//class java.lang.Byte
System.out.println(getType(sum0));//class java.lang.Integer
}public staticString getType(Object value){returnvalue.getClass().toString();
}
}
数据类型转换小练习
答案:为int,因为byte 类型内存占有1个字节,在和 int 类型运算时会提升为 int 类型 ,自动补充3个字节,因此计算后的结果还是 int 类型。
同理:当一个 int 类型变量和一个 double 变量运算时, int 类型将会自动提升为 double 类型进行运算。
转换规则
范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
强制转换
使用场景:
例1:将1.5赋值到int类型会发生什么
packageday02;public classday02_2 {public static voidmain(String[] args) {//将1.5赋值到int类型
int i = 1.5;//编译器会提示无法兼容,因为double占用8个字节,而int只有4个字节,索引int
}
}
给int赋值double类型
解决方法:将double类型,强制转换为int类型
packageday02;public classday02_2 {public static voidmain(String[] args) {//将1.5赋值到int类型//int i = 1.5;//编译器会提示无法兼容,因为double占用8个字节,而int只有4个字节,索引int
int i = (int)1.5;
System.out.println(i);//输出值为1
}
}
强制转换
例2:当一个 short 类型与 1 相加,其结果的类型一定会提升
packageday02;public classday02_3 {public static voidmain(String[] args) {short s = 1;//s = s+1;//编译器提示无法兼容 因为short只占2个字节 而int 型的1占四个字节
s = (short)(s + 1);
System.out.println(s);//输出 2
System.out.println(getType(s));//输出 class java.lang.Short
}public staticString getType(Object value){returnvalue.getClass().toString();
}
}
强制转换2
解决方法:将int 类型的1 强制转换为short类型。
注意:
1.浮点型转换成整型,直接取消小数点,可能造成精度损失
2.int型转换成short型,会砍掉2个字节,可能造成数据丢失
运算符
算数运算符
注意:Java中,整数使用以上运算符,无论怎么计算,也不会得到小数结果,例如:
packageday02;public classday02_4 {public static voidmain(String[] args) {int a = 1;
System.out.println(a/10*10);//运行结果:0
}
}
运算符
自增运算(++):
当++在变量前,表示先加后赋值(变量i自己加1,将加1后的结果赋值给result,也就是说i先计算。i和result的结果都是2)
packageday02;public classday02_5 {public static voidmain(String[] args) {int i = 1;int result = ++i;
System.out.println(i);//结果为2
System.out.println(result);//结果为2
}
}
result = ++i;
当++在变量后,表示先赋值再加(变量i先把自己的值1,赋值给变量result,此时变量result的值就是1,变量i自己再加1。i的结果是2,result的结果是1。)
packageday02;public classday02_5 {public static voidmain(String[] args) {int i = 1;int result = i++;
System.out.println(i);//结果为2
System.out.println(result);//结果为1
}
}
result = i++;
自减运算(--):
其运算顺序与自增运算一致,-- 在前表示先减后赋值,--在后表示先赋值后运算。
关于拼接:
当“+”符号在字符串中,就表示拼接
packageday02;public classday02_5 {public static voidmain(String[] args) {
String str1= "this";
String str2= " is ";
String str3= "a test";
System.out.println(str1+str2+str3);//运行结果:this is a test
System.out.println("5+5= "+5+5);//运行结果:5+5 = 55
}
}
字符串的拼接
赋值运算符
定义:赋值运算符,就是将符号右边的值,赋值给左边的变量。
packageday02;public classday02_6 {public static voidmain(String[] args) {//赋值运算符
int a = 5+5;//加等于
int i = 5;
i+=3;//计算方式 i = i + 5 变量i先加5 再赋值变量i 所以结果为8
System.out.println(i);//减等于
int i2 = 4;
i2-= 3; //计算方式 i2 = i2 - 3 变量i2先减3 再赋值给变量i2 所以结果为1
System.out.println(i2);//乘等于
int i3 = 3;
i3*= 2; //计算方式 i3 = i3 * 2 变量i3先乘以2 再赋值给i3 所以结果为 6
System.out.println(i3);//除等于
int i4 = 4;
i4/= 2; //计算方式 i4 = i4 / 2 变量i4先除以2 再赋值给i4 所以结果为 2
System.out.println(i4);//取余
int i5 = 5;
i5%= 2; //计算方式 i5 = i5 / 2 余数为1 所以结果为1
System.out.println(i5);
}
}
赋值运算符
比较运算符
比较运算符:是将两个数据之间进行比较的运算,运算结果都是布尔值,非true即false
packageday02;public classday02_7 {public static voidmain(String[] args) {int a= 1,b =2;
System.out.println(a==b);//比较两数据是否相等 因为a < b 不相等 所以返回false
System.out.println(a>b);//比较 左边数据 是否大于 右边数据 因为a < b 所以返回false
System.out.println(a
System.out.println(a>=b);//比较 左边数据 是否大于等于 右边数据 因为a < b 且不等于b 所以返回false
System.out.println(a<=b);//比较 左边数据 是否小于 右边数据 因为a < b 满足条件 所以返回true
System.out.println(a!=b);//比较 左边数据 是否不等于 右边数据 因为a < b也不等于b 所以返回true
}
}
比较运算符
逻辑运算符
逻辑运算符:是用来连接两个布尔类型的运算符,运行结果都是布尔值true或者false
packageday02;public classday2_8 {public static voidmain(String[] args) {boolean a = false;boolean b = true;boolean c = false;boolean d = true;//&& 与运算符 同真为真 为true 与运算 必须左右数据都为真才会为真
System.out.println(b &&d);//&& 与运算符 一假一真 为false
System.out.println(a &&b);//&& 与运算符 同假为假 为false
System.out.println(a &&c);//|| 或运算符 同真为真 为true 或运算 左右数据有一个数据为真 即为真
System.out.println(a ||d);//|| 或运算符 一真一假 为true
System.out.println(a ||b );//|| 或运算符 同假为假 为false
System.out.println(a ||c);//! 非运算符 非真为假 为false
System.out.println(!b);//! 非运算符 非假为真 为true
System.out.println(!a);
}
}
逻辑运算符
三元运算符
三元运算符:类似与if语句
格式:数据类型 变量名 = 布尔表达式?结果1:结果2
计算方式:
1.布尔类型表达式是true,三元运算符返回结果1,赋值给变量
2.布尔类型表达式是false,三元运算符返回结果2,赋值给变量
packageday02;public classday02_9 {public static voidmain(String[] args) {int a = 2;int b = 4;intresult;
result= (a>b)?(result=a):(result=b);//此处返回结果result = 4 因为a>b 不成立 所以result = 结果2
System.out.println(result);//对比if语句
if(a >b){
result=a;
}else{
result=b;
}//同三元运算符一样
System.out.println(result);
}
}
三元运算符与if语句对比