Java零基础(第五章)---》常见运算符的使用

目录

常用运算符

算术运算符

关系运算符

逻辑运算符 

赋值运算符  

三目运算符(条件运算符)   

字符串连接运算符 +

小试牛刀

接收用户键盘输入 


知识框架

Java零基础(第五章)---》常见运算符的使用_第1张图片

 

常用运算符

Java零基础(第五章)---》常见运算符的使用_第2张图片

算术运算符

  ❤️算术运算符:+ 求和、-  相减、*  乘积、/  商、% 求余数(求模)、 ++ 自加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));
	}
}

你可能感兴趣的:(#,JavaSE零基础,java,开发语言)