JavaSE基础 第五章 运算符

JavaSE基础 第五章 运算符

1. 运算符概述

运算符
算术运算符+、-、*、/、%(取模)、++(自加 1【单目】)、–(自减 1【单目】)
关系运算符>、>=、<、<=、==、!=
逻辑运算符&(逻辑与) 竖杠(逻辑或)、!(逻辑非)、&&(短路与)、双竖杠(短路或)
赋值运算符=、+=、-=、*=、/=、%=、^=、&=、竖杠=、<<=、>>=
位运算符&(按位与)、竖杠(按位或)、^(按位异或)、~(按位取反【单目】)、<<(左移)、>>(带符号右移)、>>> (无符号右移)
条件运算符布尔表达式?表达式 1:表达式 2 (三目)
字符串连接运算符+
其它运算符instanceof、new

2. 运算符详解

算术运算符

+
-
*
/
%	取余数

++	自增1
	可以出现在变量前, 也可以出现在变量后面,
	不管是前是后, 执行结束后, 变量的值一定会自增1.

--	自减1
	跟++一个道理
public class OperatorTest01{
	public static void main(String[] args){
		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

		int i = 1;
		System.out.println(i);
		++i;
		System.out.println(i);

		// 语法: 当++出现在变量后, 会先赋值运算, 再自增1.
		//					   前,  先自增1, 再赋值运算.
		int m = 10;
		//int n = m++;	// n = 10
		int n = ++m;	// n = 11
		System.out.println(n);
		System.out.println(m);	// m = 11


		// 题目:
		int c = 90;
		System.out.println(c++);	// 90
		System.out.println(c);		// 91

		int d = 80;
		System.out.println(++d);	// 81
		System.out.println(d);		// 81

		int e = 70;
		System.out.println(e--);	// 70
		System.out.println(e);		// 69

		int f = 60;
		System.out.println(--f);	// 59
		System.out.println(f);		// 59
	}
}

关系运算符

>
>=
<
<=
==
!=
  1. 一定要记住一个规则:
    所有关系运算符的结果都是布尔型, 不是true就是false

  2. 在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
	}
}

逻辑运算符

&	逻辑与 ( 并且 )
|	逻辑或 ( 或者 )
!	逻辑非 ( 取反 )
&&	短路与
||	短路或
  1. 特点:
    逻辑运算符两边要求都是布尔类型, 并且最终的结果也是布尔类型.

  2. 短路与和逻辑与的区别:
    运算结果没有任何区别, 完全相同,
    只不过短路与会发生短路现象.

  3. 短路现象:
    右边表达式不执行叫做短路

  4. 何时使用逻辑与, 何时使用短路与:
    从效率方面来说, &&比&效率高一点, &的第二个表达式一定会执行, &&不一定
    开发过程中, &&和&是同时并存的, 大部分情况下使用&&.

public class OperatorTest03{
	public static void main(String[] args){

		// 逻辑与&: 全真为真, 遇假则假
		System.out.println(true & true);	// true
		System.out.println(true & false);	// false
		System.out.println(false & false);	// false

		// 逻辑或|: 全假为假, 遇真为真
		int a = 100;
		int b = 101;
		int c = 99;
		System.out.println(a < b | c > b);	// true
		System.out.println(true | false);	// true
		System.out.println(false | false);	// false
		System.out.println(true | true);	// true

		// 逻辑非!: 取反
		System.out.println(!false); // true
		System.out.println(!true);	// false
		// 这里需要加一个小括号, 运算符有优先级
		System.out.println(!(a > b));


		// 短路与&&
		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

		int x = 10;
		int y = 11;
		// 逻辑与全真为真, 左边x > y结果已经是false了, 整个表达式的结果已经确认为false了,
		//		按道理来说右边的表达式不应该执行.
		System.out.println(x > y & x > y++);
		// 通过测试得出: 表达式x > y++执行了.
		System.out.println(y);	// 12
		
		int m = 10;
		int n = 11;
		// 使用短路与时, 当左边的表达式为false时, 右边的表达式不执行, 称为短路.
		System.out.println(m > n && m > n++);
		// 通过测试, m > n++未执行.
		System.out.println(n); // 11
		
		// 短路或||
		// 左边表达式结果为true时, 右边表达式不需要执行, 此时短路.
		int i = 1;
		int j = 2;
		System.out.println(i < j || i > j--);
		System.out.println(j);	// 2
	}
}

赋值运算符

  1. 包括基本赋值运算符和扩展赋值运算符
  2. 基本运算符:
    =
  3. 扩展赋值运算符:
    +=
    -=
    *=
    /=
    %=
    注意: 两个符号之间不能有空格
  4. 语法:
    使用扩展运算符时, 永远都不会改变运算结果类型
    byte x = 100;
    x += 1;
    x自诞生以来是byte类型, x以后也永远是byte, 不管后面是多大的数字.
public class OperatorTest04{
	public static void main(String[] args){
		int k = 10;
		k += 20;	// k变量追加20
		System.out.println(k);	// 30

		int i = 10;
		i = i + 10;		// 类似于+=运算符
		System.out.println(i);	// 20

		// i += 10; 和 i = i + 10;
		// 这两个类似, 但是本质上不一样.
		byte x = 100;
		System.out.println(x);
		// 错误: 不兼容的类型: 从int转换到byte可能会有损失
		// x = x + 1;
		
		// 可以通过
		x += 1;	// 等同于(byte)(x = x + 1);

		x += 199;	// 等同于(byte)(x = x + 199);
		System.out.println(x);	// 44 , 强转后会损失精度

		
		int a = 100;
		a += 100;
		System.out.println(a);	// 200

		a -= 100;
		System.out.println(a);	// 100

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

		a /= 30;
		System.out.println(a);	// 33
		
		a %= 2;
		System.out.println(a);	// 1

	}
}

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

  1. 语法格式:
    布尔表达式 ? 表达式1 : 表达式2
  2. 执行原理:
    布尔表达式的结果为true时, 执行表达式1, 否则执行表达式2
public class OperatorTest05{
	public static void main(String[] args){
		
		// 错误: 不是语句
		//100;

		// 错误: 不是语句
		// '男';
		boolean sex = true;

		// 错误: 不是语句
		// sex ? '男' : '女';	返回'男', 但是'男'不是语句, 所以报错.

		char c = sex ? '男' : '女';
		System.out.println(c);	// 男
	}
}

字符串连接运算符

  1. + 的作用:
    求和
    字符串拼接

  2. 何时使用:
    当 + 两边都是数字类型时, 求和.
    当 + 两边的任意一遍为字符串类型时, 会进行字符串拼接操作.

  3. 字符串拼接之后的结果还是一个字符串.

  4. 当一个表达式中有多个加号时:
    遵循自左向右的顺序依次执行( 除非添加小括号 ).

public class OperatorTest06{
	public static void main(String[] args){
		int a = 100;
		int b = 200;
		// 求和
		int sum = a + b;
		// 字符串拼接
		System.out.println("sum = " + sum);	// sum = 30

		int nianLing = 20;

		// 字符串拼接
		System.out.println("年龄 = " + nianLing);	// 年龄 = 20
		
		// 先求和再拼接
		System.out.println(a + b + "110");	// 300110
		
		// 先拼接再拼接
		System.out.println(a + (b + "110"));	// 100200110

		// 在控制台上输出"100 + 200 = 300", 要求只能使用变量a(100)和b(200)和符号
		System.out.println(a + " + " + b + " = " + (a + b));
		
		// 在控制台输出"登录成功欢迎**回来", 要求**使用变量来表示
		String name = "stephen";
		System.out.println("登录成功欢迎" + name + "回来");
	}
}

3. 本章练习

第一题:判断以下程序的输出结果。

int x = 10; 
int a = x+ x++; 
System.out.println("a =" + a); 
System.out.println("x =" + x);

int b = x + ++x; 
System.out.println("b =" + b); 
System.out.println("x =" + x); 

int c = x + x--; 
System.out.println("c =" + c); 
System.out.println("x =" + x); 

int d = x + --x; 
System.out.println("d =" + d); 
System.out.println("x =" + x); 
第二题:判断以下程序的输出结果。 
 
int a = 15; 
int b = 2; 
double c = 2; 
System.out.println(a + "/" + b + "=" + (a / b)); 
System.out.println(a + "%" + b + "=" + (a % b)); 
System.out.println(a + "/" + c + "=" + (a / c)); 
System.out.println(a + "%" + c + "=" + (a % c)); 
第三题:判断以下程序的输出结果。 
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); 
System.out.println("y =" + y); 
System.out.println("z =" + z); 
第四题:判断以下程序的输出结果。 

int x; 
double y; 
x = (int) 22.5 + (int) 34.7; 
y = (double) x; 
System.out.println("x = " + x); 
System.out.println("y = " + y); 
第五题:判断以下程序的输出结果。 

int i = 5; 
int j = 5; 
int m = 5; 
int n = 5; 
i++; 
j = j + 1; 
m--; 
n = n - 1; 
System.out.println(i); 
System.out.println(i++); 
System.out.println(++i); 
System.out.println(i--); 
System.out.println(); 
System.out.println(j); 
System.out.println(j++); 
System.out.println(j--); 
System.out.println(--j); 
System.out.println(); 
System.out.println(m); 
System.out.println(n); 
第六题:判断以下程序的输出结果。 

int i = 0; 
int j = 0; 
System.out.println(i); 
System.out.println(j); 
i++; 
++j; 
System.out.println(i); 
System.out.println(j); 
System.out.println("--------------------------"); 
System.out.println(i++); 
System.out.println(++j); 
System.out.println("--------------------------"); 
System.out.println(i); 
System.out.println(j); 

4. 习题答案

// 第一题:判断以下程序的输出结果。

	int x = 10;
	int a = x + x++; 
	System.out.println("a = " + a);	// a = 20
	System.out.println("x = " + x);	// x = 11

	int b = x + ++x; 
	System.out.println("b = " + b); // b = 23
	System.out.println("x = " + x); // x = 12

	int c = x + x--; 
	System.out.println("c = " + c); // c = 24
	System.out.println("x = " + x); // x = 11

	int d = x + --x; 
	System.out.println("d = " + d); // d = 21
	System.out.println("x = " + x); // x = 10
//	第二题:判断以下程序的输出结果。 
	 

	int a = 15; 
	int b = 2; 
	double c = 2; 
	System.out.println(a + "/" + b + "=" + (a / b)); // 15/2=7
	System.out.println(a + "%" + b + "=" + (a % b)); // 15%2=1
	System.out.println(a + "/" + c + "=" + (a / c)); // 15/2.0=7.5
	System.out.println(a + "%" + c + "=" + (a % c)); // 15%2.0=0
//	第三题:判断以下程序的输出结果。 
	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
//	第四题:判断以下程序的输出结果。 

	int x; 
	double y;
	x = (int)22.5 + (int)34.7; 
	y = (double)x; 
	System.out.println("x = " + x); // x = 56
	System.out.println("y = " + y); // y = 56.0
//	第五题:判断以下程序的输出结果。 

	int i = 5; 
	int j = 5; 
	int m = 5; 
	int n = 5; 
	i++;		// 6
	j = j + 1;	// 6
	m--;		// 4
	n = n - 1;	// 4
	System.out.println(i);		// 6
	System.out.println(i++);	// 6
	System.out.println(++i);	// 8
	System.out.println(i--);	// 8
	System.out.println();		// 空行       
	System.out.println(j);		// 6
	System.out.println(j++);	// 6
	System.out.println(j--);	// 7
	System.out.println(--j);	// 5
	System.out.println();		// 空行      
	System.out.println(m);		// 4
	System.out.println(n);		// 4
//	第六题:判断以下程序的输出结果。 

   int i = 0; 
   int j = 0; 
   System.out.println(i);	// 0
   System.out.println(j);	// 0
   i++;	// 1
   ++j;	// 1
   System.out.println(i);	// 1
   System.out.println(j);	// 1
   System.out.println("--------------------------"); 
   System.out.println(i++);// 1
   System.out.println(++j);// 2
   System.out.println("--------------------------"); 
   System.out.println(i);	// 2
   System.out.println(j);	// 2

5. 补充 : 接受用户键盘输入

  1. 输出信息到控制台:
    Ssytem.out.println();

  2. 接受键盘输入:
    看不懂很正常, 因为这个代码时面向对象章节学习之后才能理解的.

    前提: java.util.Scanner s = new java.util.Scanner(System.in);

  3. 接受一个整数:
    int num = s.nextInt();

  4. 接收一个字符串:
    String str = s.next()

public class KeyInput{
	public static void main(String[] args){

		// 创建一个键盘扫描器对象
		// s: 变量名, 可以修改, 其它不能修改
		java.util.Scanner s = new java.util.Scanner(System.in);

		// 接受一个int类型的数据
		// 代码执行到此, 会暂停下来, 等待用户输入, 用户可以输入一个整数, 然后回车
		// 回车之后i变量就有值了, 这个值就是用户输入的那个数.
		int i = s.nextInt();
		System.out.println("你输入的数为 : " + i);

		System.out.print("请输入用户名: ");
		String name = s.next();
		System.out.println("欢迎" + name + "回来");
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值