JavaSE 基础 - 第五章 运算符

JavaSE 基础 - 第五章 运算符

    • 1 算术运算符: + 、 - 、 * 、 / 、 % 求余数(求模)、 ++ 自加1 、 -- 自减1
    • 2 关系运算符: >、 >=、 < 、<= 、== 、!
    • 3 逻辑运算符:&、 | 、 ! 、 &&、 ||
    • 4 赋值运算符: = 、 += 、 -=、 *=、 /=、 %
    • 5 三目运算符: 布尔表达式 ? 表达式1 : 表达式2
    • 6 字符串连接运算符: +
    • 补充1:
    • 补充2:【拓展--接收键盘的输入】
    • 传送门

1 算术运算符: + 、 - 、 * 、 / 、 % 求余数(求模)、 ++ 自加1 、 – 自减1

1)对于++运算符来说:
   可以出现在变量前,也可以出现在变量后。
   不管出现在变量前还是后,总之++执行结束之后,变量的值一定会自加1。

2)研究:++出现在变量前和变量后有什么区别?
   语法:当++出现在变量前的时候,会先进行自加1的运算,然后再赋值。
		  int x = 100;
		  int y = ++x;
	  	  System.out.println(x); // 101
		  System.out.println(y); // 101
       当++出现在变量后,会先做赋值运算,再自加1
		  int m = 20;
		  int n = m++;
		  System.out.println(n); // 20
		  System.out.println(m); // 21
		  
     (记忆小技巧:看等号=后面是现有++还是先有变量,
		   先有++那么就是先自加1再赋值,
		   先有变量那么就是先赋值再自加1       )

2 关系运算符: >、 >=、 < 、<= 、== 、!

一定要记住一个规则:
	所有的关系运算符的运算结果都是布尔类型,
	不是true就是false,不可能是其他值。

在java语言中:
	= : 赋值运算符
	== :关系运算符,判断是否相等。

注意:关系运算符中如果有两个符号的话,两个符号之间不能有空格。
	>= 这是对的, > = 这是不对的。
	== 这是对的,= = 这是不对的。

3 逻辑运算符:&、 | 、 ! 、 &&、 ||

           &	逻辑与(可以翻译成并且)
	       |	逻辑或(可以翻译成或者)
	       !	逻辑非(取反)
	       &&	短路与
	       ||	短路或	

 1)非常重要:
 逻辑运算符两边要求都是布尔类型,并且最终的运算结果也是布尔类型。
 这是逻辑运算符的特点。
	100 & true 不行,语法错误。
	100 & 200 不行,没有这种语法。
	true & false 这样可以。

 2) & 两边都是true,结果才是true  (与&  同真才为真)
     | 有一边是true,结果就是true (或|   有真则为真,同假才为假)
 
 3)System.out.println(!false); // true   (非假为真)
    System.out.println(!true); // false    (非真为假)

 4)关于短路与 &&,短路或 || 。(其中重点学习短路与&&,短路或||照葫芦画瓢。)

    ① 短路与&& 和 逻辑与 &有什么区别?
	    首先这两个运算符的运算结果没有任何区别,完全相同。
	    只不过“短路与&&”会发生短路现象。
		    System.out.println(true & true); // true
		    System.out.println(true & false); // false
		    System.out.println(false & false); // false

		    System.out.println(true && true); // true
		    System.out.println(true && false); // false
		    System.out.println(false && false); // false

    ② 什么是短路现象呢?
	    使用短路与&&的时候,当左边的表达式为false的时候,右边的表达式不执行 这种现象被称为短路。

    ③ 什么时候使用&&,什么时候使用& ?
          从效率方面来说,&&比&的效率高一些。
          因为逻辑与&不管第一个表达式结果是什么,第二个表达式一定会执行。

          以后的开发中,短路与&&和逻辑与还是需要同时并存的。
	        大部分情况下都建议使用短路与&&
	        只有当既需要左边表达式执行,又需要右边表达式执行的时候,才会选择逻辑与&。	

    同理,对短路或||
        “或”的时候只要有一边是true,结果就是true。
    所以,当左边的表达式结果是true的时候,右边的表达式不需要执行,此时会短路。

4 赋值运算符: = 、 += 、 -=、 *=、 /=、 %

 基本赋值运算符?
	=
 扩展的赋值运算符?
	+=
	-=
	*=
	/=
	%=

很重要的语法机制:
    使用扩展赋值运算符的时候,永远都不会改变运算结果类型。
	  byte x = 100;
	  x += 1;
	  x自诞生以来是byte类型,那么x变量的类型永远都是byte。不会变。
	  不管后面是多大的数字。
 
赋值运算符“=”右边优先级比较高,先执行右边的表达式
然后将表达式执行结束的结果放到左边的“盒子”当中。(赋值)

——————————————————————————————————————————————————————————————————————————————————
	  int k = 10;
	  k += 20; 	  // k变量追加20   类似于k = k + 20; (“=”右边结果为30,把30重新赋值给k)
	  System.out.println(k); // 30

————————————————————————————————————————————————————————————————————————————————
	  // 研究:
	  // i += 10 和 i = i + 10 真的是完全一样吗?
	  // 答案:不一样,只能说相似,其实本质上并不是完全相同。
	 	  byte x = 100; // 100没有超出byte类型取值范围,可以直接赋值
	  	  System.out.println(x); // 100


	  // 分析:这个代码是否能够编译通过?
	  // 错误: 不兼容的类型: 从int转换到byte可能会有损失
	  //x = x + 1; // 编译器检测到x + 1是int类型,int类型可以直接赋值给byte类型的变量x吗?  不可以

	  // 使用扩展赋值运算符可以吗?
	  // 可以的,所以得出结论:【x += 1 和 x = x + 1不一样。】
	  // 其实【 x += 1 等同于:x = (byte)(x + 1);  】
	  	  x += 1;
	  	  System.out.println(x); // 101

	  // 早就超出byte的取值范围(-128 ~ 127)了。
	  	  x += 199; 	  // x = (byte)(x + 199);
	  	  System.out.println(x); 	  // 44 (当然会自动损失精度了。)
————————————————————————————————————————————————————————————————————————————————————
	  	  int y = 100;
	  	  y += 100;
	  	  System.out.println(y);        // 200

	  	  y -= 100; // x = x - 100;
	  	  System.out.println(y);        // 100

	  	  y *= 10; // x = x * 10;
	  	  System.out.println(y);        // 1000

	  	  y /= 30; // x = x / 30;
	  	  System.out.println(y);        // 33

	  	  y %= 10; // x = x % 10;
	  	  System.out.println(y);        // 3
——————————————————————————————————————————————————————————————————————————————————

5 三目运算符: 布尔表达式 ? 表达式1 : 表达式2

三目运算符,也叫条件运算符
语法格式:布尔表达式 ? 表达式1 : 表达式2

执行原理是什么?
	布尔表达式的结果为true时,表达式1的执行结果作为整个表达式的结果。
	布尔表达式的结果为false时,表达式2的执行结果作为整个表达式的结果。	
____________________________________________________________
	  	  boolean sex = true;
	  	  // 前面的变量的c的类型不能随意编写。
	  	  // 最终的计算结果是字符型,所以变量也需要使用char类型。
  	  	  char c = sex ? '男' : '女';
	  	  System.out.println(c);     //男

	  	  sex = false;
	  	  System.out.println(sex ? '男' : "女");    //女
________________________________________________________________

6 字符串连接运算符: +

1、+ 运算符在java语言中有两个作用。
	作用1:求和
	作用2:字符串拼接

2、什么时候求和?什么时候进行字符串的拼接呢?
	当 + 运算符两边都是数字类型的时候,求和。
	当 + 运算符两边的“任意一边”是字符串类型,那么这个+会进行字符串拼接操作。

3、一定要记住:字符串拼接完之后的结果还是一个字符串。

4、注意:当一个表达式当中有多个加号的时候
遵循“自左向右”的顺序依次执行。(除非额外添加了小括号,小括号的优先级高)

补充1:

// 大家讨论最多的一个问题。
// 如果只是针对于面试题的话,建议死记硬背。
	int k = 10;
	k = k++;
	System.out.println(k);   //结果为10(惊讶)


   原因:java中运行结果是10; c++中运行结果是11,  java和c++的编译器是不同的人开发的。原理不同。
java中:
	int k = 10;
 // k = k++;      对应的是下面三行代码
	int temp = k;
	k++;
	k = temp;

	System.out.println(k); //10

补充2:【拓展–接收键盘的输入】

1、输出信息到控制台:
	System.out.println(...);
2、在java中怎么接收键盘的输入呢?
	先声明一下,这个代码看不懂很正常,因为这个代码是面向对象章节学习之后才能够理解。
	这个代码以后复制粘贴就行。

	前提:java.util.Scanner s = new java.util.Scanner(System.in); 
	接收一个整数怎么办?
		int num = s.nextInt();
		
	接收一个字符串怎么办?
		String str = s.next();
————————————————————————————————————————————————————————————————————————————————
import java.util.Scanner;

public class KeyInput2{
	public static void main(String[] args){
		// 创建键盘扫描器对象
		Scanner s = new Scanner(System.in);
		// 输出一个欢迎信息
		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 基础 - 第四章 数据类型
下一章:JavaSE 基础 - 第六章 控制语句

你可能感兴趣的:(JavaSE)