目录
常用运算符
算术运算符
关系运算符
逻辑运算符
赋值运算符
三目运算符(条件运算符)
字符串连接运算符 +
小试牛刀
接收用户键盘输入
知识框架
❤️算术运算符:+ 求和、- 相减、* 乘积、/ 商、% 求余数(求模)、 ++ 自加1、-- 自减1
❤️对于++/--运算符来说:
⭐️可以出现在变量前,也可以出现在变量后。
⭐️不管出现在变量前还是后,总之++/--执行结束之后,变量的值一定会自加1。public class OperatorTest01{ public static void main(String[] rags){ int a = 10; int b = 3; System.out.println(a + b); // 13 System.out.println(a - b); // 7 System.out.println(a * b); // 30 System.out.println(a / b); // 3 System.out.println(a % b); // 1 // 重点掌握 ++ 和 -- // ++ 自加1(++可以出现在变量前,也可以出现在变量后。) //研究:++出现在变量前和变量后有什么区别? //1.语法:当++出现在变量后,会先做赋值运算,再自加1 int m = 20; int n = m++; System.out.println(n); // 20 System.out.println(m); // 21 //2.语法规则:当++出现在变量前的时候,会先进行自加1的运算,然后再赋值。 int x = 100; int y = ++x; System.out.println(x); // 101 System.out.println(y); // 101 // 题目 int c = 90; System.out.println(c++); // 传,这个“传”在这里有一个隐形的赋值运算。90 // 拆解 //int temp = c++; //System.out.println(temp); System.out.println(c); // 91 int d = 80; System.out.println(++d); //81 // 拆解 //int temp2 = ++d; //System.out.println(temp2); System.out.println(d); // 81 } }
❤️关系运算符:>、>=、<、 <=、==、!=
❤️重点注意:所有的关系运算符的运算结果都是布尔类型,不是true就是false,不可能是其他值。
❤️在java语言中: = : 赋值运算符;== :关系运算符,判断是否相等。
⭐️注意:关系运算符中如果有两个符号的话,两个符号之间不能有空格。
⭐️>= 这是对的, > = 这是不对的。== 这是对的,= = 这是不对的。中间不能有空格public class OperatorTest02{ public static void main(String[] args){ int a = 10; int b = 10; System.out.println(a > b); // false System.out.println(a >= b); // true System.out.println(a < b); // false System.out.println(a <= b); // true System.out.println(a == b); // true System.out.println(a != b); // false } }
❤️逻辑运算符:& 逻辑与、| 逻辑或、! 逻辑非(取反)、&& 短路与、|| 短路或
❤️重要:逻辑运算符两边要求都是布尔类型,并且最终的运算结果也是布尔类型。这是逻辑运算符的特点。
⭐️例如:100 & true 不行,语法错误。
100 & 200 不行,语法错误。
true & false 这样可以。
⭐️& 两边都是true,结果才是true; | 有一边是true,结果就是true
❤️短路与&& 和 逻辑与 &有什么区别?
⭐️这两个运算符的运算结果没有任何区别,完全相同。只不过“短路与&&”会发生短路现象。即遇到假条件,逻辑与会继续后面的内容;短路不会执行后面的内容!
⭐️什么时候使用&&,什么时候使用& ?
从效率方面来说,&&比&的效率高一些。因为逻辑与&不管第一个表达式结果是什么,第二个表达式一定会执行。大部分情况下都建议使用短路与&&只有当既需要左边表达式执行,又需要右边表达式执行的时候,才会选择逻辑与&。public class OperatorTest03{ public static void main(String[] args){ //1.逻辑与:只要有一边是false,结果就是false。只有两边同时为true,结果才是true。并且所有判断条件会全都执行一遍! System.out.println(true & true); // true System.out.println(true & false); // false System.out.println(false & false); // false System.out.println((100 > 90) & (100 > 101)); // false int a = 100; int b = 101; int c = 90; System.out.println(a < b & a > c); // true //2.逻辑或:只要有一边是true,结果就是true。并且所有判断条件也全都会执行一遍! System.out.println(true | false); // true System.out.println(true | true); // true System.out.println(false | false); // false //3.逻辑非:取反 System.out.println(!false); // true System.out.println(!true); // false System.out.println(!(a > b)); // true //4.短路与&& int x = 10; int y = 11; //逻辑与&什么时候结果为true(两边都是true,结果才是true) //左边的 x>y 表达式结果已经是false了,其实整个表达式的结 //果已经确定是false了,按道理来说右边的表达式不应该执行。 //通过这个测试得出:x > y++ 这个表达式还是执行了,这就是逻辑与& System.out.println(x > y & x > y++); System.out.println(y); // 12 //测试短路与&& int m = 10; int n = 11; //使用短路与&&的时候,当左边的表达式为false的时候,右边的表达式不执行 //这种现象被称为短路;前面表达式为假,后面不执行,这就是短路与&& System.out.println(m > n && m > n++); System.out.println(n); // 11 //5.短路或 || //|| 短路或;“或”的时候只要有一边是true,结果就是true。 // 所以,当左边的表达式结果是true的时候,右边的表达式就不需要执行,此时会短路。 } }
❤️赋值运算符包括“基本赋值运算符”和“扩展赋值运算符”:基本的、扩展的。
❤️基本赋值运算符: =
❤️扩展的赋值运算符:+=、-=、*=、 /=、%=;相当于有一个默认的强制类型转换;例如:byte x = 100;x += 100等价于:x = (byte)(x+100)
⭐️注意:扩展赋值运算符在编写的时候,两个符号之间不能有空格。
❤️重要的语法机制:使用扩展赋值运算符的时候,永远都不会改变运算结果类型。
⭐️例如:byte x = 100,x += 1就等价于x = (byte)(x+1);x自诞生以来是byte类型,那么x变量的类型永远都是byte。不会变。不管后面是多大的数字。
⭐️例如:byte x = 100,x = x + 1就等价于x = x+1;x是byte类型,1默认是整型,最终结果就是整型int,改变了最终x的类型public class OperatorTest04{ public static void main(String[] args){ //1.赋值运算符“=”右边优先级比较高,先执行右边的表达式,然后将表达式执行结束的结果放到左边的“盒子”当中。(赋值) int i = 10; //2.以 += 运算符作为代表,学习扩展赋值运算符。其它的运算符,例如:-= *= /= %= 和 += 原理相似。 int k = 10; k += 20; //k变量追加20,可以解读为k = (int)(k + 20) System.out.println(k); // 30 int m = 10; // += 运算符类似于下面的表达式 m = m + 20; System.out.println(m); // 30 int y = 100; y += 100; System.out.println(y); // 200 y -= 100; // y = y - 100; System.out.println(y); // 100 y *= 10; // y = y * 10; System.out.println(y); // 1000 y /= 30; // y = y / 30; System.out.println(y); // 33 y %= 10; // y = y % 10; System.out.println(y); // 3 } }
❤️思考:i = i + 10 和 i += 10真的相同吗?
答:不一样,只能说相似,其实本质上并不是完全相同。
⭐️例如:
byte x = 100; //100没有超出byte类型取值范围,可以直接赋值 System.out.println(x); // 100 //1.对于x = x + 1 // 错误: 不兼容的类型: 从int转换到byte可能会有损失 // 编译器检测到x + 1是int类型,int类型不可以直接赋值给byte类型的变量x x = x + 1; //2.使用扩展赋值运算符x += 1,就等价于x = (byte)(x + 1) //可以的,所以得出结论:x += 1 和 x = x + 1不一样。 x += 1; System.out.println(x); // 101 // 就算超出byte的取值范围,利用扩展运算符也是没问题的! x += 199; // 就等价于 x = (byte)(x + 199); System.out.println(x); // 44 (当然会自动损失精度了。)
❤️语法格式:布尔表达式 ? 表达式1 : 表达式2
❤️执行原理是什么?
⭐️布尔表达式的结果为true时,表达式1的执行结果作为整个表达式的结果。
⭐️布尔表达式的结果为false时,表达式2的执行结果作为整个表达式的结果。public class OperatorTest05{ public static void main(String[] args){ //1.合法的java语句;表示声明一个变量,起名i int i = 100; //2.这里会编译出错吗? 100;//错误: 不是语句 sex ? '男' : '女';//错误: 不是语句 //3.前面的变量的c的类型不能随意编写。 //最终的计算结果是字符型,所以变量也需要使用char类型。 boolean sex = true; char c = sex ? '男' : '女'; System.out.println(c); //4.特殊情况 //错误: 不兼容的类型: 条件表达式中的类型错误 //char x = sex ? '男' : "女";//一个是字符型一个是字符串型,最终用char接收,err System.out.println(x); //这样就可以,因为System.out.println(因为这里什么类型的数据都能放); sex = false; System.out.println(sex ? '男' : "女"); } }
❤️+ 运算符在java语言中有两个作用。
⭐️作用1:求和
⭐️作用2:字符串拼接
❤️什么时候求和?什么时候进行字符串的拼接呢?
⭐️当 + 运算符两边都是数字类型的时候,求和。
⭐️当 + 运算符两边的“任意一边”是字符串类型,那么这个+会进行字符串拼接操作。
❤️记住:字符串拼接完之后的结果还是一个字符串。public class OperatorTest06{ public static void main(String[] args){ //1.定义一个年龄的变量。+在这里会进行字符串的拼接操作。 int nianLing = 35; System.out.println("年龄=" + nianLing); // "年龄=35" //2.这里的 + 两边都是数字,所以加法运算 int a = 100; int b = 200; int c = a + b; System.out.println(c); // 300 //3.注意:当一个表达式当中有多个加号的时候 // 遵循“自左向右”的顺序依次执行。(除非额外添加了小括号,小括号的优先级高) System.out.println(a + b + "110"); // 最后一定是一个字符串:"300110" // 第一个+先运算,由于第一个+左右两边都是数字,所以会进行求和。 // 求和之后结果是300,代码就变成了:System.out.println(300 + "110"); // 那么这个时候,由于+的右边是字符串"110",所以此时的+会进行字符串拼接。 //4. System.out.println(a + (b + "110")); // 先执行小括号当中的程序:b + "110",这里的+会进行字符串的拼接, // 拼接之后的结果是:"200110",这个结果是一个字符串类型。 // 代码就变成了:System.out.println(a + "200110"); // 这个时候的+还是进行字符串的拼接。最终结果是:"100200110" //5.在控制台上输出"100+200=300" // 以下有效的运算符加号一共有4个,这4个加号都是字符串拼接操作。 System.out.println(a + "+" + b + "=" + c); //6.分析这个结果是多少? // 以下表达式中没有小括号,所以遵循自左向右的顺序依次执行。 // 第1,2,3,4个加号都是进行字符串拼接,拼接之后的结果是:"100+200=100" // 前4个加号运行之后是一个字符串"100+200=100" // 然后这个字符串再和最后一个b变量进行字符串的拼接:"100+200=100200" System.out.println(a + "+" + b + "=" + a + b); //7.和上面程序不一样的地方是:最后一个加号先执行,并且会先进行求和运算。 System.out.println(a + "+" + b + "=" + (a + b));//"100+200=300" } }
❤️如何定义字符串变量String
//1.String是字符串类型,并且String类型不属于基本数据类型范畴,属于引用类型。 // name是变量名,只要是合法的标识符就行。 //例如:String name = "李四"; // String类型是字符串类型,其中S是大写 //错误:类型不兼容。 //String name = 100;//后面只能跟字符串 //2.会进行字符串的拼接 //System.out.println("登录成功欢迎" + name + "回来"); //口诀:加一个双引号"",然后双引号之间加两个加号:"++",然后两个加号中间加变量名:"+name+"
❤️例1:特殊例题
public class Homework01{
public static void main(String[] args){
int i = 10;
i = i++;
//1.java中运行结果是10;c++中运行结果是11
//因为java和c++的编译器是不同的人开发的。原理不同。
System.out.println(i);
//2.在java语言中i++,这种表达式在执行的时候,会提前先将i变量找一个临时变量存储一下。(C++中并没有这样做。)
//例如:int k = 10; k = k++;
//java编译器会把 k = k++解读为:int temp = k; k++; k = temp;C++中没有最后一步
}
}
❤️例2:
int x = 10;
int a = x+ x++代码解释:只有这段代码结束x的值才会变;例如:x++结果还是10;x + x++前面的x此时还是10,而不是11;只有当这段代码执行结束后x的值才会变成11
public class Test01{
public static void main(String[] args){
int x = 10;
int a = x+ x++; //20,这行代码结束x就是11
System.out.println("a =" + a); //a = 20
System.out.println("x =" + x); //x = 11
int b = x + ++x; //23
System.out.println("b =" + b); //b = 23
System.out.println("x =" + x); //x = 12
int c = x + x--; //24
System.out.println("c =" + c); //c = 24
System.out.println("x =" + x); //x = 11
int d = x + --x; //21
System.out.println("d =" + d); //d = 21
System.out.println("x =" + x); //x = 10
}
}
❤️例3:
public class Test02{
public static void main(String[] args){
int a = 15;
int b = 2;
double c = 2;
System.out.println(a + "/" + b + "=" + (a / b)); // a/b = 7
System.out.println(a + "%" + b + "=" + (a % b)); // a%b = 1
System.out.println(a + "/" + c + "=" + (a / c)); // a/c = 7.5
System.out.println(a + "%" + c + "=" + (a % c)); // a%c = 1.0
}
}
❤️例4:
public class Test03{
public static void main(String[] args){
boolean x, y, z;
int a = 15;
int b = 2;
x = a > b; // true;
y = a < b; // false;
z = a != b; // true;
System.out.println("x =" + x); //x = true
System.out.println("y =" + y); //y = false
System.out.println("z =" + z); //z = true
}
}
❤️例5:
public class Test04{
public static void main(String[] args){
int x;
double y;
x = (int) 22.5 + (int) 34.7; //56
y = (double) x; //56.0
System.out.println("x = " + x); // X = 56
System.out.println("y = " + y); // Y = 56.0
}
}
❤️例6:
public class Test05{
public static void main(String[] args){
int i = 5;
int j = 5;
int m = 5;
int n = 5;
i++; //i++是5,i是6
j = j + 1; //j是6
m--; //m--是5,m是4
n = n - 1;//n是4
System.out.println(i); //6
System.out.println(i++); //6,此时i是7
System.out.println(++i); //8,此时i是8
System.out.println(i--); //8,此时i是7
System.out.println(i); //7
System.out.println(); //换行
System.out.println(j); //6
System.out.println(j++); //6,此时j是7
System.out.println(j--); //7,此时j是6
System.out.println(--j); //5,此时j是5
System.out.println(j); //5
System.out.println(); //换行
System.out.println(m); //4
System.out.println(n); //4
}
}
❤️例7:
public class Test06{
public static void main(String[] args){
int i = 0;
int j = 0;
System.out.println(i);//0
System.out.println(j); //0
i++; //i是1
++j; //j是1
System.out.println(i); //1
System.out.println(j); //1
System.out.println("--------------------------");
System.out.println(i++); //1,此时i是2
System.out.println(++j); //2,此时j是2
System.out.println("--------------------------");
System.out.println(i); //2
System.out.println(j); //2
}
}
❤️前提:java.util.Scanner s = new java.util.Scanner(System.in);
接收一个整数:int num = s.nextInt();
接收一个字符串:String str = s.next();
❤️第一种:
public class KeyInput{
public static void main(String[] args){
//1.创建一个键盘扫描器对象;s 变量名,可以修改。其它不能改。
java.util.Scanner s = new java.util.Scanner(System.in);
//2.接收键盘整型数据。
int i = s.nextInt();
System.out.println("您输入的数字是:" + i);
//3.接收一个字符串
String str = s.next();
System.out.println("您输入了:" + str);
//例:
System.out.print("请输入用户名:");
String name = s.next();
System.out.println("欢迎"+name+"回来");
}
}
❤️第二种:
import java.util.Scanner;
public class KeyInput2{
public static void main(String[] args){
//1.创建键盘扫描器对象
Scanner s = new Scanner(System.in);
//2.输出一个欢迎信息
System.out.println("欢迎使用小型迷你计算器");
System.out.print("请输入第1个数字:");
int num1 = s.nextInt();
System.out.print("请输入第2个数字:");
int num2 = s.nextInt();
System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));
}
}