前言
文章内容输出来源:拉勾教育JAVA就业训练营
总目录跳转链接:总目录
如有侵权请联系本人
邮箱:xiaogueika@tom.com
文章目录
算术运算符
+
表示加法运算符-
表示减法运算符*
表示乘法运算符/
表示除法运算符%
表示取模/取余运算符
算术运算符声明和使用:
package cn.cyh.test;
/**
* 编程实现算术运算符的使用
* @author cyh
* @version 2020/12/9 21:37
*/
public class ArithmeticTest {
public static void main(String[] args) {
//1.声明两个int类型的变量并初始化
//int ia = 6, ib = 2; //表示声明两个int类型的变量ia和ib,不推荐使用
int ia = 6; //推荐该万式,提高了代码的可读性
int ib = 2;
System.out.println("ia = "+ ia);
System.out.println("ib = "+ ib);
System.out.println("------------------------------------");
//2.使用上述变量实现算术运算符的使用 + - * / %
System.out.println("ia + ib = " + (ia + ib));
System.out.println("ia - ib = " + (ia - ib));
System.out.println("ia * ib = " + (ia * ib));
System.out.println("ia / ib = " + (ia / ib));
System.out.println("ia % ib = " + (ia % ib));
}
}
注意事项
- 3.1 当两个整数相除时结果只保留整数部分,丢弃小数部分
System.out.println(5 / 2);
- 3.2 若希望保留小数部分该如何处理?
- 处理方式一:使用强制类型转换将其中一个操作数转换为doub1e类型再运算即可
System.out.println((double)5 / 2);
- 处理方式二:让其中一个操作数乘以1.0即可 (推荐)
System.out.println(5 * 1.0 / 2);
- 3.3 0不能做除数
System.out.println(5 / 0);//java.lang.ArithmeticException(算数异常): / by zero
System.out.println(5 / 0.0);//Infinity 无穷
System.out.println(0 / 0.0);//NaN 非数字
案例题目
提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒。
如:输入7199,输出1小时59分59秒。
package cn.cyh.test;
import java.util.Scanner;
/**
* 编程使用算术运算符实现秒数的拆分
* @author cyh
* @version 2020/12/9 21:57
*/
public class ArithmeticTimeTest {
public static void main(String[] args) {
//1.提示用户输入一个正整数的秒数并使用变量记录
System.out.print("请输入一个正整数秒数:");
Scanner scanner =new Scanner(System.in);
int num =scanner.nextInt();
//2.将正整数的秒数拆分为时分秒后并使用变量记录
int hour = num / 3600; //时
int min = num % 3600 / 60; //分
int sec = num % 60; //秒
//3.打印最终的拆分结果
System.out.println(num + "秒转换为" + hour + "小时" + min +"分钟" + sec + "秒");
}
}
字符串连接运算符
+
可以实现字符串的连接。同时可以实现字符串与其他数据类型“相连"。
//+既可以作为子符串连接行,又可以作为加法运算行
//只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理,否则当做加法
System.out.println(hour + min + sec); //8
System.out.println(hour + min + sec + ""); //8
System.out.println(hour + min + "" + sec); //26
System.out.println(hour + "" +min + sec); //116
System.out.println("" +hour + min + sec); //116
System.out.println("" +(hour + min + sec)); //8
关系/比较运算符
`>`表示是否大于运算符 `>=`表示是否大于等于运算符
`<`表示是否小于运算符 `<=`表示是否小于等于运算符
`==`表示是否等于运算符 `!=`表示是否不等于运算符
/**
* 编程实现关系运算符的使用
* @author cyh
* @create 2020/12/10 8:52
*/
public class RelationTest {
public static void main(String[] args) {
//1.声明两个int类型的变量并初始化
int ia=5;
int ib=2;
//2.使用变量实现关系运算符的使用并打印结果
System.out.println("ia > ib = "+(ia > ib));
System.out.println("ia >= ib = "+(ia >= ib));
System.out.println("ia < ib = "+(ia < ib));
System.out.println("ia <= ib = "+(ia <= ib));
System.out.println("ia == ib = "+(ia == ib));
System.out.println("ia != ib = "+(ia != ib));
}
}
案例题目
提示用户输入一个整数,使用关系运算符判断该整数是否为负数,若是则打印
true
,若不是则打印false
。
import java.util.Scanner;
/**
* 编程使用关系运算符实现负数的判断
* @author Administrator
* @create 2020/12/10 8:57
*/
public class RelationJudgeTest {
public static void main(String[] args) {
//1.提示用户输入一个整数并使用变量记录
System.out.println("请输入一个整数:");
Scanner scanner=new Scanner(System.in);
int num = scanner.nextInt();
//2.判断该整数是否为负数并打印
System.out.println("num = " + num);
System.out.println("是否为负数:" + (num < 0));
}
}
自增减运算符
++
表示自增运算符,用于使得当前变量自身的数值加1的效果--
表示自减运算符,用于使得当前变量自身的数值减1的效果
/**
* 编程实现自增减运算符的使用
* @author Administrator
* @create 2020/12/10 9:08
*/
public class SelfTest {
public static void main(String[] args) {
//1.声明一个int类型的变量并初始化
int ia = 10;
System.out.println("ia = " + ia);
System.out.println("------------------------------");
//2.实现目增减运算符的使用
//表示让变量ia自身的数值加1,并覆盖该变量原来的数值
ia++;
System.out.println("ia++ = " + ia);
++ia;
System.out.println("++ia = " + ia);
--ia;
System.out.println("--ia = " + ia);
ia--;
System.out.println("ia-- = " + ia);
System.out.println("------------------------------");
//3.简单的变换
//其中ia++这个整体叫做表达式 其中ia叫做操作数/变量
//也就是ia++和ia表示不同的含义,因此所占的内存空间应该不同
//下面的代码是在打印表达式的结果
//后++表示先让变量ia的数值作为整个表达式的最终结果,然后再让ia变量自身的数值加1
System.out.println(ia++); //10
System.out.println("ia = " + ia); //11
//前++表示先让变量自身的数值加1,然后再让变量的数值作为整个表达式的结果
System.out.println(++ia); //12
System.out.println("ia = " + ia); //12
}
}
笔试考点
把代码加到上面代码块里,猜猜他们值等于多少,答案向右划
int ib = ia++;
System.out.println("ib = " + ib); //12
System.out.println("ia = " + ia); //13
int ic = ++ia;
System.out.println("ic = " + ic); //14
System.out.println("ia = " + ia); //14
// 14 + 16
System.out.println(ia++ + ++ia); //30
System.out.println("ia = " + ia); //16
逻辑运算符
&&
表示逻辑与运算符,相当于“并且”,同真为真,一假为假。||
表示逻辑或运算符,相当于“或者”,一真为真,同假为假。!
表示逻辑非运算符,相当于“取反”,真为假,假为真。- 逻辑运算符的操作数均为
boolean
表达式。
/**
* 编程实现逻辑运算符的使用
* @author cyh
* @create 2020/12/10 9:34
*/
public class LogicTest {
public static void main(String[] args) {
// 1.声明两个boolean类型的变量并初始化
boolean b1 = true;
boolean b2 = false;
System.out.println("b1 = " + b1);
System.out.println("b2 = " + b2);
System.out.println("b1 && b2 = "+(b1 && b2)); //false 并且
System.out.println("b1 || b2 = "+(b1 || b2)); //true 或者
System.out.println("!b1 = "+!b1); //取反
System.out.println("!b2 = "+!b2);
}
}
逻辑运算符的短路特性
- 对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式;
- 对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第二个表达式;
//2.测试一下短路特性
int ia = 3;
int ib = 5;
//对于逻辑与运算符来说,若第一个条件为假则整个表达式为假,此时跳过第二个表达式不执行
boolean b4 = (++ia == 3) && (++ib == 5);
System.out.println("b4 = " + b4); //false
System.out.println("ia = " + ia); //4 ++ia条件不成立短路
System.out.println("ib = " + ib); //5 因为++ia条件不成立短路,++ib不执行
//对于逻辑或运算符来说,若第一个条件为真则整个表达式为真,此时跳过第二个表达式不执行
boolean b5 = (++ia == 5) || (++ib == 5);
System.out.println("b4 = " + b4); //true
System.out.println("ia = " + ia); //5
System.out.println("ib = " + ib); //5
案例题目
提示用户输入一个正整数,使用逻辑运算符判断该正整数是否为三位数,若是则打印
true
,否则打印false
。
import java.util.Scanner;
/**
* 编程使用逻辑运算符判断三位数
* @author cyh
* @create 2020/12/10 9:50
*/
public class LogicJudgeTest {
public static void main(String[] args) {
//1.提示用户输入一个正整数并使用变量记录
System.out.println("请输入一个正整数");
Scanner scanner =new Scanner(System.in);
int num = scanner.nextInt();
//2.使用逻辑运算符判断是否为三位数并打印 >=100 <=999 &&
//System.out.printin(100<=num <=999); 错误:二元运算符’<=’的操作数类型错误
//逻辑运算符主要用于连接多个关系运算符作为最终运算的表达式,用于实现多条件的连接
System.out.println(100 <= num && num <=999);
}
}
条件/三目运算符
- 条件表达式?表达式1:表达式2
- 判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2。
// 使用三目运算符来判断是否是三位数
System.out.println(num + ((100 <= num && num <=999)?"是三位数":"不是三位数"));
案例题目
提示用户输入两个整数,使用三目运算符找到最大值并打印出来。
import java.util.Scanner;
/**
* 编程使用三目运算符查找最大值
* @author cyh
* @create 2020/12/10 10:01
*/
public class ThreeKye {
public static void main(String[] args) {
//1.提示用户输入两个整数并使用变量记录
System.out.println("请输入两个整数:");
Scanner scanner =new Scanner(System.in);
int ia =scanner.nextInt();
int ib =scanner.nextInt();
//2.使用三目运算符找到最大值并打印
System.out.println("最大值是:"+(ia > ib ? ia :ib));
}
}
赋值运算符
=
表示赋值运算符,用于将=
右边的数据赋值给=
左边的变量,覆盖变量原来的数值。- 赋值表达式本身也有值,其本身之值即为所赋之值。
+=
、-=
、*=
、/=
、…
/**
* 赋值运算符的使用
* @author cyh
* @create 2020/12/10 10:07
*/
public class AssignTest {
public static void main(String[] args) {
//1.声明一个int类型的变量并初始化
int ia = 3;
System.out.println("ia = " + ia);
System.out.println("--------------------");
//2.简单赋值运算符的使用
//表示将数据5赋值给变量ia并且覆盖变量ia原来的数值值
ia = 5;
System.out.println("ia = " + ia);
int ib = ia = 6;
System.out.println("ia = " + ia);
System.out.println("ib = " + ib);
int ic;
ic = ib =ia = 8;
System.out.println("ia = " + ia); //ia = 8
System.out.println("ib = " + ib); //ib = 8
System.out.println("ic = " + ic); //ic = 8
System.out.println("--------------------");
//3.复合运算值运算符的使用
//ia = ia + 2; 目前推荐使用该写法
ia += 2;
System.out.println("ia = " + ia);
}
}
笔试考点
笔试考点1:
byte b1 = 10;
System.out.println("b1 = " + b1);
//b1 = b1 +2; 错误:不兼容的类型: 从int转换到byte可能会有损失 byte +iht 相加结果还是int类型
//b1 = b1 +(byte)2; 错误:不兼容的类型: 从int转换到byte可能会有损失 byte + byte 相加结果还是int类型编详器优化
//b1 =(byte)(b1 +2); 强制类型转换,将int类型转换为byte
b1 += 2; //真正等价于b1=(byte)(bl+2);
System.out.println("b1 = " + b1);
笔试考点2:
ia == 2; //- 表示判断变量ia的数值是否等于2
2 == ia; //- 表示判断2是否等于变量ia的数值,从结果上来说等价,推荐该方式
ia == 2; //- 表示将2赋值给变量ia,覆盖变量ia原来的数值
2 =ia; //- 编译报错 错误:意外的类型
移位运算符(了解)
<<
左移运算符,用于将数据的二进制位向左移动,右边使用0补充>>
有移运算符,用于将数据的二进制位向右移动,左边使用符号位补充>>>
表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0补充。
/**
* 编程实现移位运算符的使用
* @author cyh
* @create 2020/12/10 10:34
*/
public class MoveBitTest {
public static void main(String[] args) {
//1.声明一个byte类型的变量并初始化
byte b1 = 13;
System.out.println("b1 = " + b1);
System.out.println("---------------------------------");
//2.移位运算符的使用
//13的二进制是:0000 1101 =>左移1位的结果是: 0001 1010 => 换算为十进制整数是:26
//byte b2 = b1 << 1; 错误:不兼容的类型:从int转换到byte可能会有损失 自动提升为int类型,也就是是32位二进制
byte b2 =(byte)(b1 << 1);
System.out.println("b2 = " +b2);
System.out.println("b1 << 1 = "+(b1 << 1)); //左移1位相当于当前整数的数值*2
System.out.println("b1 << 2 = "+(b1 << 2)); //左移1位相当于当前整数的数值*4
System.out.println("---------------------------------");
//13的二进制是:0000 1101 =>右移1位的结果是:0000 0110 => 换算为十进制整数是:6
System.out.println("b1 >> 1 = "+(b1 >> 1)); //左移1位相当于当前整数的数值/2
System.out.println("b1 >> 2 = "+(b1 >> 2)); //左移1位相当于当前整数的数值/4
System.out.println("---------------------------------");
//逻辑右移 对于非负数来说,逻辑右移和右移的效果是一致
System.out.println(b1 >>> 2);
}
}
位运算符(了解)
&
表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0.|
表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0.~
表示按位取反运算符,按照二进制位进行取反,1为0,0为1.^
表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.
/**
* 编程实现位运算符的使用
* @author Administrator
* @create 2020/12/10 10:52
*/
public class BitTest {
public static void main(String[] args) {
//1.声明两个byte类型的变量并初始化
byte b1 = 11;
byte b2 = 13;
System.out.println("b1 = " + b1);
System.out.println("b2 = " + b2);
System.out.println("--------------------------------");
//2.实现位运算符的使用
//b1的二进制为: 0000 1011
//b1的二进制为: 0000 1101
System.out.println("b1 & b2 = "+(b1 & b2)); //按位与:同1为1,一0为0: 0000 1001 => 转为十进制是:9
System.out.println("b1 | b2 = "+(b1 | b2)); //按位与:一1为1,同0为0: 0000 1111 => 转为十进制是:15
System.out.println("b1 ^ b2 = "+(b1 ^ b2)); //1按位与:相同为0,不同为1: 0000 0110 => 转为十进制是:6
System.out.println("~b1 = "+ ~b1); //按位与:1为0,0为1: 1111 0100
//二进制 1111 0100 转为十进制 =>先减1:1111 0011 =>按位取反:0000 1100 =>转为十进制:12=>添加负号:-12
}
}
运算符的优先级
知识总结
1.运算符
- 算术运算符:
+
-
*
/
%
- 字符串连接符:
+
- 关系/比较运算符:
>
>=
<
<=
==
!=
- 自增减运算符:
++
--
- 逻辑运算符:
&&
||
!
- 条件/三目运算符:
?:
- 赋值运算符:
=
+=
-=
*=
/=
- 移位运算符(了解):
<<
>>
>>>
- 位运算符(了解):
&
|
^
~
运算符的优先级