基本数据类型转换(Conversion)
在Java程序中,不同的基本数据类型的值经常需要进行相互转换。Java语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种转换方式:自动类型转换和强制类型转换。
1、自动类型转换(隐式类型转换)
自动转换:
-
将
取值范围小的类型
自动提升为取值范围大的类型
。
基本数据类型的转换规则
小结:通过上面案例我们可以得出数据类型的转换关系(取值范围从小到大),如图所示:
2、强制类型转换(显示类型转换)
将取值范围大的类型
强制转换成取值范围小的类型
。
比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
转换格式:
数据类型 变量名 = (数据类型)被强转数据值;
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示:有风险,可能会损失精度或溢出
(2)boolean类型不参与
(3)当某个值想要提升数据类型时,也可以使用强制类型转换
3、特殊的数据类型转换
1、任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型
System.out.println("" + 1 + 2);
2、但是String类型不能通过强制类型()转换,转为其他的类型
String str = "123";
int num = (int)str;//错误的
int num = Integer.parseInt(str);//后面才能讲到,借助包装类的方法才能转
运算符(Operator)
-
表达式:用运算符连接起来的式子
-
运算符的分类: 按照功能分:算术运算符、赋值运算符、比较运算符、逻辑运算、条件运算符...
“+”号的两种用法
-
第一种:对于
+
两边都是数值的话,+
就是加法的意思 -
第二种:对于
+
两边至少有一边是字符串得话,+
就是拼接的意思
自加自减运算
-
和
其他变量放在一起使用
或者和输出语句放在一起使用
,前++
和后++
就产生了不同。 -
++在前,先自加,后使用;
-
++在后,先使用,后自加。
面试题1
public class LogicExer1{
public static void main(String[] args){
int x = 1;
int y = 1;
//x==2 ,x++ false x = 2 左边为false
//右边继续
//++y y==2 y=2 y==2成立 右边为true
//false & true 结果false
if(x++==2 & ++y==2){
x =7;
}
System.out.println("x="+x+",y="+y);//x=2,y=2
}
}
public class LogicExer2{
public static void main(String[] args){
int x = 1,y = 1;
//x==2,x++ 左边条件为false,x=2
//因为短路与,右边不算
//false && ? 结果是false
if(x++==2 && ++y==2){
x =7;
}
System.out.println("x="+x+",y="+y);//x=2,y=1
}
}
public class LogicExer3{
public static void main(String[] args){
int x = 1,y = 1;
//x==1,x++ 左边为true,x=2
//因为是逻辑与,右边继续
//++y, y==1 y=2 右边为false
//条件true | false,最终为true
if(x++==1 | ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y);//x=7,y=2
}
}
public class LogicExer4{
public static void main(String[] args){
int x = 1,y = 1;
//x==1,x++ 左边为true,x=2
//因为是短路或,左边为true,右边就不看了
//整个条件为true
if(x++==1 || ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y);//x=7,y=1
}
}
面试题2
public class LogicExer5{
public static void main (String [] args) {
boolean x = true;
boolean y = false;
short z = 42;
//如果if((z++==42)&&(y==true))条件成立,执行z++,不成立,就不执行z++
//左边的条件:z==42,z++ z==42成立,z++变成43
//中间虽然是短路与,因为左边现在是true,右边还要看
//右边 y==true 不成立
//true && false 结果为false
if((z++==42)&&(y==true)) z++;
//左边为x=false,赋值 结果就为false
//中间虽然为短路或,因为左边是false,右边继续看
//++z,z==45 ++z变成44,z==45是否成立,不成立
//false || false 结果为false
if((x=false) || (++z==45)) z++;
System. out.println("z="+z);//44
}
}
class Test4_2 {
public static void main (String [] args) {
boolean x = true;
boolean y = false;
short z = 42;
//如果if(y=true)条件成立,接着判断if((z++==42)&&(y==true)) z++;
//如果不成立,if((z++==42)&&(y==true)) z++; 不看的
/*
if(y = true)
if((z++==42)&&(y==true)) z++;
if((x=false) || (++z==45)) z++;
*/
//标准
//y=true赋值,y就被修改为true,if(true)成立
if(y=true){
//左边:z==42,z++ 成立,z变成43
//&&短路与,不满足短路的情况,右边继续
//y==true 成立
//true && true,结果为true
if((z++==42)&&(y==true)){
//z++变成44
z++;
}
}
//左边:x=false不成立
//中间虽然是短路或,但是没满足短路的情况,右边继续
//++z,z==45 ++z变成45,z==45成立
if((x=false) || (++z==45)){
//z++,变成46
z++;
}
System. out.println("z="+z);//46
}
}
条件运算符
- 条件运算符格式:
条件表达式?结果1:结果2
运算符优先级
提示说明:
(1)表达式不要太复杂
(2)先算的使用()
大体的排序:算术-->位-->比较-->逻辑-->三元-->赋值