运算符和表达式
运算符:
就是对常量或者变量进行操作的符号。
比如: + - * /
表达式:
用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式。
比如:a + b 这个整体就是表达式。
而其中+是算术运算符的一种,所以这个表达式也称之为算术表达式。
注意:在算数运算中,整数之间的操作结果只能得到整数,若想得到小数需要小数参与运算
练习:数值拆分
需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
代码示例:
//1.键盘录入一个三位数 //导包 --- 创建对象 --- 接收数据 Scanner sc = new Scanner(System.in); System.out.println("请输入一个三位数"); int number = sc.nextInt();//123 //2.获取这个三位数的个位、十位、百位并打印出来 //公式: //针对于任意的一个数而言 //个位: 数字 % 10 int ones = number % 10; //十位: 数字 / 10 % 10 int tens = number / 10 % 10; //百位: 数字 / 100 % 10 int hundreds = number / 100 % 10; //输出结果 System.out.println(ones); System.out.println(tens); System.out.println(hundreds);
类型转换
隐式转换
也叫自动类型提升。就是把一个取值范围小的数据或者变量,赋值给另一个取值范围大的变量。此时不需要我们额外写代码单独实现,是程序自动帮我们完成的。
取值范围从小到大的关系:
byte short int long float double
案例:
byte b1 = 10; byte b2 = 20; ??? result = b1 + b2;//int 问变量result是什么类型的?
解释:
因为b1和b2都是byte类型的。所以在参与计算的时候,变量b1和变量b2里面的值都会自动提升为int类型的。最终其实就是两个int类型的相加,最终结果也是int类型的。
强制转换
如果要把一个取值范围大的数据或者变量赋值给另一个取值范围小的变量。是不允许直接操作。如果一定要这么干,就需要加入强制转换。
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;
显然,强制类型转换有时会导致数据精度的丢失
字符串的+操作
当+操作中出现字符串时,此时就是字符串的连接符,会将前后的数据进行拼接,并产生一个新的字符串。
案例:
1 + "abc" + 1
结果:"1abc1"
值得注意的是,字符的+操作和字符串有所不同:
当+操作中出现了字符,会拿着字符到计算机内置的ASCII码表中去查对应的数字,然后再进行计算。
案例:
char c = 'a'; int result = c + 0; System.out.println(result);//97
ASCII码表中:
'a' ----- 97
'A' ----- 65
自增和自减
分类:
++ 自增运算符 -- 自减运算符
++:就是把变量里面的值+1
--:就是把变量里面的值-1
使用方式:
-
放在变量的前面,我们叫做先++。 比如:++a
-
放在变量的后面,我们叫做后++。 比如:a++
注意点:
不管是先++,还是后++。单独写在一行的时候,运算结果是一模一样的。
逻辑运算符
异或^
计算规则:如果两边相同,结果为false,如果两边不同,结果为true
System.out.println(true^false);//不同返回true System.out.println(true^true);//相同返回false
逻辑与&和逻辑或|
&:一假则假
|:一真则真
短路与&&和短路或||
执行结果和逻辑与和或完全相同,增加了短路效果
当左边不能确定整个表达式的结果,右边才会执行。当左边能确定整个表达式的结果,那么右边就不会执行了。从而提高了代码的运行效率。
三元运算符
格式:关系表达式 ? 表达式1 :表达式2 ;
案例:动物园里有两只老虎,两只老虎的体重分别为通过键盘录入获得,请用程序实现判断两只老虎的体重是否相同。
System.out.println("enter two tigers weight:"); double t1=sc.nextDouble(); double t2=sc.nextDouble(); System.out.println(t1==t2?true:false);
案例:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm。请用程序实现获取这三个和尚的最高身高。
int h1=150; int h2=210; int h3=165; int max=h1>h2?h1:h2; max=max>h3?max:h3; System.out.println("The highest is "+max);