运算符
算数运算符
算数运算符包含 + - * / % .
+: 1.表示正数 2.表示+法运算 3.作为字符串的连接符存在
字符串和任意类型的数据进行+操作 最终得到的结果都是字符串本身
所有的算数运算符满足四则运算规则
先算乘除 后算加减 有括号 优先算括号
% 取余数
demo:
public class Test1 {
public static void main(String[] args) {
String name = "机智的小军";
int age = 24;
String sex = "男";
System.out.println("姓名:" + name +" 年龄:" + age + " 性别:" + sex );
}
}
运行结果: 姓名:机智的小军 年龄:24 性别:男
**自增和自减运算符**
++:自增 在原来数据的基础上 +1
1.单独使用的时候 没有任何区别 都是作为自增符号
2.当参与运算的时候:
++在前:先去自增 然后拿着自增后的结果值去参与运算
++在后:先去拿着原值参与运算 然后在自增
–:自减 在原来数据的基础上 -1
demo :
public class test1 {
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = b++;// a =10,b=11,c=10
c = --a;//a=9,b=11,c=9
b = ++a;//a=10,b=10,c=9
a = c--;// a=9,b=10,c=8
System.out.println("a:" + a);
System.out.println("b:" + b);
System.out.println("c:" + c);
}
运行结果: a:9
b :10
c:8
赋值运算符
-
= , += ,-=, *= , /=, %= 这些都是赋值运算符
-
其中=是基本的赋值运算符 其他都为扩展的赋值运算符
-
+= 运算符:是将左右两边的值进行相加然后赋值给左边
-
面试题:
-
short s=1; s = s+1; short s=1; s+=1; //这几行代码会不会有问题,如果有问题,是哪里出现的问题 //使用+=符号可以避免类型的强转
-
上面的那两行代码会出错,s是shortl类型,在进行变量赋值运算的过程中,将s的类型转换为 int 类型,两边类型不匹配就会报错.
关系运算符
最终的结果值都是boolean类型的 要么是true 要么是false
将关系运算符连接起来的式子叫做关系表达式
==: 比较符号左右两边的值是否相同
!=:判断符号左右两边是否不同 如果不同 返回true 如果相同 返回false
< 和 <=: 如果左边比右边小 返回true 否则返回false
> 和 >=: 如果左边比右边大 返回true 否则返回false
class HelloWorld {
public static void main(String[] arge){
int a = 3;
int b = 5;
boolean bo = (a == b);//false
boolean b1 = (a != b);//true
//小于 小于等于
boolean b2 = (a <= b);//true
//大于 大于等于
boolean b3 = (a >= b);//false
System.out.println(bo);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
//instanceof 判断你是否是我的一个实例
String s = "hello";
System.out.println(s instanceof String);//true
System.out.println(a instanceof String);//false
}
}
逻辑运算符
-
左右两边连接boolean类型的值或者boolean类型的表达式(关系表达式)
-
&: 当符号左右两边都为true的时候 结果才为true 只要有一个false 那最终结果就是false
-
|: 当符号左右两边都为false的时候 结果才为false 只要有一个true 最终结果就是true
-
^: 当符号左右两边一样的时候 结果为false
-
当左右两边不一样的时候 最终结果为true
-
!: 取反 求相反数 只在右边跟上一个boolean类型的值
-
&& :双与或者叫做短路与(and) 两边都是true,结果才为true
-
|| :双或或者叫做短路或(or) 两边都为false,结果才为false
demo:
public class Test2 {
public static void main(String[] args) {
System.out.println(true & true);
System.out.println(true & false);
System.out.println(false & true);
System.out.println(false & false);
int a = 10;
int b = 20 ;
double c = 20.4;
boolean bool = true;
System.out.println(b > c || a > b++ );
System.out.println("b = " + b);
}
}
运算结果: true
false
false
false
false
b = 21
位运算符
-
>>:右移符号
-
将值转为二进制以后,开始移位
-
如果高位为0,那么移位以后的空位也补0
-
如果高位为1,那么移位以后的空位补1
-
-
-
<<:左移符号
- 将值转为二进制以后,开始左移,空位补0
-
>>>:无符号右移
- 将值转为二进制以后,开始移位,不管高位是0还是1,都补0
总结:向右移几位,就是除以2的几次方
向左移几位,就是乘以2的几次方
demo:
public class Test3 {
public static void main(String[] args) {
int a = -32;
a = a >>2 ;
System.out.println(a);
/* 1000 0000 0000 0000 0000 0000 0010 0000
1111 1111 1111 1111 1111 1111 1101 1111
1111 1111 1111 1111 1111 1111 1110 0000````移位前补码
111111 1111 1111 1111 1111 1111 1110 00 移位后补码
1111 1111 1111 1111 1111 1111 1111 0111 反码
1000 0000 0000 0000 0000 0000 0000 1000 //-8 源码*/
}
}
三目运算符
格式: 关系表达式 ? 表达式1 : 表达式2;
-
如果关系表达式结果为true,那么就执行表达式1
-
如果关系表达式结果为false,那么就执行表达式2
-
表达式1和表达式2的最终结果是一个明确的答案值
demo:
class HelloWorld {
public static void main(String[] arge){
//求出abc的最大值
int a = 10;
int b = 15;
int c = 16;
//int max = (a > b )? (a > c ? a : c ): (b > c ? b : c);
int max = (a > b & a > c) ? a : (b > c ? b : c);
System.out.println(max);
}
}
键盘输入
获取两个数的最大值
想要使用键盘录入 必须得使用一个类:Scanner类
1.创建键盘录入对象(Scanner)对象
2.使用对象中的方法去接受键盘录入的数据
3.将数据存储到变量中
4.比较大小
注意点:
记得导入Scanner包 import java.util.Scanner;
1.创建键盘录入对象(Scanner)对象 缺什么 new什么
2.使用对象中的方法去接受键盘录入的数据
-
nextInt: 专门接受键盘录入的int类型的数据 如果不是int类型的数据 就会报错
-
nextLine: 用于接收键盘录入的String类型的数据
-
next: 用于接收键盘录入的String类型的数据
demo:
import java.util.Scanner;
class Test5{
public static void main(String[] arge){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数");
int a = sc.nextInt();
System.out.println("请输入第二个整数");
int b = sc.nextInt();
int max = a > b ? a : b;
System.out.println("最大值为:" + max);
}
}