运算符
就是程序中用来运算的符号
算术运算符
算术运算符分为+、-、*、/、%、++和–。
+号:
+在java中有三种用途
-
正号,例如int num = +10;这里代表赋值的是正10.
-
加法运算
-
作为连接符号使用
public class Demo{ public static void main(String[] args){ //声明一个变量 int num = +5+4; //第一个+是正号,而第二个+就是加法运算符 System.out.println(num); /* + 号左右两边的操作数只要有一个是字符串类型 那么+ 号的作用就是拼接作用,将+ 号左右两边的操作数 拼接为一个新的字符串。 */ System.out.println("1+1="+1+1); //这里与""字符串连接的+号就作为连接符号使用,1+1=1就成为了一个新的字符串,又和一个加号连接,把最后一个1连接在了一起成为了一个字符串,所以打印结果为1+1=11 System.out.println("1+1="+(1+1)); } }
-号:
而符号只有两种用途
-
作为负号来使用,在创建变量初始化时,加-号代表这个数是负的
例如int sum = -5;
-
作为减法运算符来使用
*号:
*就代表两个数的相乘,作为乘法运算符来使用
/号
/号作为除法运算符来使用
整数使用除号如果不是整除会舍弃小数点后的数据
例如 5/2,在解释执行后会显示出答案为2
%号:
%号可以用来取余
例如 10%3,在解释执行后会显示出答案为1
++号 --号:
++ – 分别为自增和自减
++ – 为单独语句的时候前++ – 和后++ – 都是自增或者自减1
而当它们不是单独语句的时候
前++ – 为先自增自减再运算
后++ – 为先运算再自增自减
public class Demo03{
public static void main(String[] args){
//声明一个变量
int num = 10;
//自增
//num++;
num- ;
System.out.println(num);
num = 10;
//自增
//++num;
--num;
System.out.println(num);
//将num归为10
num = 10;
//将num++的结果赋值给变量存储
int result = num++;//先运算 再自增
System.out.println("result="+result+",num="+num);
//num归为10
num = 10;
result = ++num;
System.out.println("result="+result+",num="+num);
//声明变量
int j = 10;
int k = 4;
result = j- k++ + ++k + k- + ++j;
System.out.println("result="+result+",k="+k+",j="+j);
//result = 28 k = 5 j = 10
}
}
关系运算符
关系运算符用来比较两端操作数
< > >= <=用来比较基本数据类型
== !=可以比较基本数据类型和引用类型
关系运算符比较之后得到的结果就是布尔值
public class Demo04{
public static void main(String[] args){
System.out.println(5>3);//得到结果为true
//测试使用== !=
int num1 = 10;
int num2 = 20;
System.out.println(num1==num2);//比较相等
//声明两个字符串类型的变量
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);//得到结果为true
//System.out.println(str1>str2);//编译报错
System.out.println(str1!=str2);
}
}
逻辑运算符
- 逻辑运算符左右两边连接的操作数是一个boolean类型的值
- & 左右两边操作数有一个为false,其结果就是false,如果都为true其结果才为true。
- | 左右两边操作数有一个为true,其结果就是true,如果都为false其结果才为false。
- ! 取反 !false为true !true为false
- ^ 两端操作数相同为false 不同为true
- && || 称之为短路与和短路或,&&如果第一个操作数为false其结果就是false不会执行第二个操作数。|| 如果第一个操作数为true,整个结果就为true,不会执行第二个操作数
- & | ^ 既是逻辑运算符也是位运算符
public class Demo05{
public static void main(String[] args){
// 通过一个运算符连接不是boolean
System.out.println("测试&运算符");
System.out.println(true&false);
System.out.println(true&true);
System.out.println(false&false);
System.out.println(false&true);
System.out.println("测试&&运算符");
System.out.println(true&&false);
System.out.println(true&&true);
System.out.println(false&&false);
System.out.println(false&&true);
System.out.println("测试|运算符");
System.out.println(true|false);
System.out.println(true|true);
System.out.println(false|false);
System.out.println(false|true);
System.out.println("测试||运算符");
System.out.println(true||false);
System.out.println(true||true);
System.out.println(false||false);
System.out.println(false||true);
System.out.println("测试!运算符");
System.out.println(!false);
System.out.println(!true);
System.out.println("测试^运算符");
System.out.println(true^false);
System.out.println(true^true);
System.out.println(false^false);
System.out.println(false^true);
}
}
/**
模拟登录:
*/
public class LoginV1{
public static void main(String[] args){
//声明两个变量存放注册的信息
int regUname = 123;
int regPwd = 123;
//声明两个变量存放登录信息
int loginUname = 123;
int loginPwd = 234;
boolean flag = (regUname==loginUname) && (regPwd==loginPwd);
System.out.println(flag);
}
}
/**
如何实现用户输入:
1:在当前类的头顶上编写如下代码:
import java.util.Scanner;
2: 在代码中编写如下代码: //只需要写一次
Scanner input = new Scanner(System.in);
3: 在上述信息编写完成之后,编写如下代码:
int num = input.nextInt();
*/
import java.util.Scanner;
public class LoginV2{
public static void main(String[] args){
//声明两个变量存放注册的信息
int regUname = 123;
int regPwd = 123;
//给用户提示信息
System.out.println("请输入用户名>>>>>");
Scanner input = new Scanner(System.in);//只需要写一次
int loginUname = input.nextInt();//获取用户键盘上输入的值
System.out.println("请输入密码>>>>>");
int loginPwd = input.nextInt();
//通过&&判定是否登陆成功
boolean flag = (regUname==loginUname)&&(regPwd==loginPwd);
System.out.println(flag);
}
}
拓展运算符
+= -= *= /= %=
举例:num += 2 和 num = num + 2 效果相同 其他的与加法类似
拓展运算符的缺点:不利于阅读理解
拓展运算符的优点:减少代码量
提高编译速度
自动强制转换
public class Demo08{
public static void main(String[] args){
//声明两个变量存放两个学生分数
int zhangScore = 120;
int liScore = 98;
//声明变量存放
int result = 0;
//result += zhangScore; //result = result + zhangScore;
//result += liScore;//result = result + liScore;
result = result + zhangScore;
result = result + liScore;
System.out.println(result);
int num = 10;
byte b = 10;
// b =(byte)(b+num);
b += num;
System.out.println(b);
}
}
条件运算符
三目运算符 格式为 表达式1?表达式2:表达式3
效果是如果表达式1的值为true,那么运算结果为表达式2,反之则是表达式3
public class Demo06{
public static void main(String[] args){
// 计算两个数的最大值:
//声明2个变量存放值
int num1 = 20;
int num2 = 30;
System.out.println(num1>num2);
//三目运算符
int max = 0;//num1>num2?num1:num2;
System.out.println("num1和num2中大的值是:"+max);
//计算三个数的最大值
int num3 = 26;
max = num1>num2?num1:num2>num3?num1>num2?num1:num2:num3;
System.out.println("num1和num2,num3中大的值是:"+max);
}
}
常见面试题
/**
三目运算符中的面试题:
表达式中类型会自动提升
int num = 90>100?90.0:100;
System.out.println(num);
*/
public class Demo07{
public static void main(String[] args){
// 判定一个数字奇数还是偶数
int num = -1;
// 被除数-被除数/除数*除数
String str = num%2==1?"奇数":"偶数";
System.out.println(str);
}
}
位运算符
& | ^
运算符的优先级
- 算数>关系>逻辑>三目>赋值
- 单目>双目>三目
- 加括号优先级最高