【Java基础知识14讲-05:Java运算符和表达式】
- 5.1 运算符
1.表达式是⽤来说明某种运算规则的语⾔成份,由参与运算的操作数、运算符及括号组成
2.表达式运算得到的结果称为表达式的值,这个值的数据类型也就是表达式的类型
3.运算符的作⽤是使它连接的操作数完成特定运算,对不同类型的数据能够进⾏的运算是不同的
4.Java语⾔提供了算术运算符、关系运算符、逻辑运算符、位运算符等种类丰富的运算,并对运算符的优先级、结合性有明确的规定。
运算符:
1.赋值运算符
2.算术运算符
3.关系运算符
4.逻辑运算符
5.位运算符
6.三元运算符
- 5.2赋值运算符 =
赋值运算符=
赋值运算符是双⽬运算符
左边必须是变量,不能是常量或者表达式
x = 14;
y = false;
- 5.3算术运算符 双目和单目
算术运算符按操作数个数分为双⽬运算符和单⽬运算符两类。
一:双⽬算术运算符
两个整数类型的数据进⾏算术运算后,结果仍然是整数类型
如: 10/3 = 3
模运算求a除以b的余数,结果的符号与被除数a的符号相同
如: -10%3 =-3
举例如下:
//import java.until.Scanner; //引入
public class Basic {
public static void main(String[] arrgs){
//运算符举例
System.out.println("10/3=" + (10/3));
System.out.println("-10%3=" + (-10%3));
}
}
在IED中运行结果如下
二:单⽬算术运算符
注意:java中a++ 和++a稍微有区别
a++表达式的的值是(a的值)然后加1;
++a表达式的值是(a的值加1);
程序举例如下:
//import java.until.Scanner; //引入
public class Basic {
public static void main(String[] arrgs){
//运算符举例
System.out.println("10/3=" + (10/3));
System.out.println("-10%3=" + (-10%3));
// a++,和 ++a举例
int num1 = 50;
int num2 = 50;
System.out.println("num1++ =" + (num1++));
System.out.println("num1=" + num1);
System.out.println("++num2 =" + (++num2));
System.out.println("num2=" + num2);
}
}
在IDE中运行结果如下:
- 5.4关系运算符
关系表达式通过关系运算符确定两个数据之间的小于、大于及相等关系,也称比较运算表达式:
程序举例如下:
//import java.until.Scanner; //引入
public class Basic {
public static void main(String[] arrgs){
//运算符举例
System.out.println("10/3=" + (10/3));
System.out.println("-10%3=" + (-10%3));
// a++,和 ++a举例
int num1 = 50;
int num2 = 50;
System.out.println("num1++ =" + (num1++));
System.out.println("num1=" + num1);
System.out.println("++num2 =" + (++num2));
System.out.println("num2=" + num2);
//关系运算符举例
System.out.println("3>1 is" +(3 > 1));
System.out.println("6<5 is" +(6 < 5));
}
}
在IDE中运算结果如下:
- 5.5 逻辑运算符 与或非
逻辑运算符可以对布尔类型的数据进⾏运算,结果也是布尔类型。
Java语⾔提供了两个双⽬逻辑运算符:
&&(逻辑与)
||(逻辑或)
⼀个单⽬逻辑运算符:!(逻辑⾮)
- 5.5位运算符
位运算符用来对整型数据按二进制位进行运算,结果也是整型数据。
Java语言的位运算包括位逻辑运算和位移运算。
程序举例如下:
//import java.until.Scanner; //引入
public class Basic {
public static void main(String[] arrgs){
//运算符举例
System.out.println("10/3=" + (10/3));
System.out.println("-10%3=" + (-10%3));
// a++,和 ++a举例
int num1 = 50;
int num2 = 50;
System.out.println("num1++ =" + (num1++));
System.out.println("num1=" + num1);
System.out.println("++num2 =" + (++num2));
System.out.println("num2=" + num2);
//关系运算符举例
System.out.println("3>1 is" +(3 > 1));
System.out.println("6<5 is" +(6 < 5));
//位运算符举例
int m = 3; // 00000000 00000000 00000000 00000011
int n = 6; // 00000000 00000000 00000000 00000110
int resultAnd = m & n; //位与运算
System.out.println("resultAnd=" + resultAnd);
// 00000000 00000000 00000000 00000010 即2
System.out.println("3 >> 1 =" + (3 >> 1));
//3 右移1位, 即00000011 变为 00000001,即1
}
}
在IDE中运行结果如下:
- 5.6三元运算符(条件运算符)
条件运算符是提供的⼀个三⽬运算符,使⽤它构成的条件运算表达式可以根据⼀个条件在两个表达式的值中选择⼀个作为结果。
条件运算符的使⽤形式:
条件? 表达式1 : 表达式2
当条件为true时,结果是表达式1
当条件为false时,结果是表达式2
例如:
12>8 ? 100 : 200 的结果是100
12<8 ? 100 : 200 的结果是200
举例如下:
//import java.until.Scanner; //引入
public class Basic {
public static void main(String[] arrgs){
//运算符举例
System.out.println("10/3=" + (10/3));
System.out.println("-10%3=" + (-10%3));
// a++,和 ++a举例
int num1 = 50;
int num2 = 50;
System.out.println("num1++ =" + (num1++));
System.out.println("num1=" + num1);
System.out.println("++num2 =" + (++num2));
System.out.println("num2=" + num2);
//关系运算符举例
System.out.println("3>1 is" +(3 > 1));
System.out.println("6<5 is" +(6 < 5));
//位运算符举例
int m = 3; // 00000000 00000000 00000000 00000011
int n = 6; // 00000000 00000000 00000000 00000110
int resultAnd = m & n; //位与运算
System.out.println("resultAnd=" + resultAnd);
// 00000000 00000000 00000000 00000010 即2
System.out.println("3 >> 1 =" + (3 >> 1));
//3 右移1位, 即00000011 变为 00000001,即1
//三元运算符举例
int statement = 20;
int result1 = statement > 10 ? 1:0;
int result2 = statement < 10 ? 1:0;
System.out.println("result1=" + result1);
System.out.println("result2=" + result2);
}
}
在
IDE中运算结果如下:
- 5.7运算符的优先级和结合性
【注:数字越小,表示优先级越高】
例如:
a = b + d/5 * 4;
这个表达式中含有不同优先级的运算符,其中“/”和“”的优先级⾼于“+”,⽽“+”有⾼于“=”,但“/”和“”的优先级是相同的,结合性的定义解决这个问题,算术运算符的结合性为“由左向右”,优先级相同时,由左向右计算。
括号可以改变优先级
(忘记优先级时可以有括号改变优先级)
a = (b + d)/5 * 4;
- 5.8本章节代码总结
以下为《Java基础知识14讲-05:运算符和表达式》章节学习中所有代码,其中注释掉了测试输入Scanner的代码块:
import java.util.Scanner;
/**
* Created by wzejun on 2018/12/2.
*/
//import java.until.Scanner; //引入
public class Basic {
public static void main(String[] arrgs){
int x = 10;
int y;
y = 20;
System.out.println(x);
System.out.println(y);
//int 的取值范围是-2的31次幂~~2的31次幂减1,若超出范围会这样
//int number = 999999999999; //此时IDE会提示integer number too large
int number =9999;
int number1 = Integer.MAX_VALUE; //JAVA中有次静态变量Integer.MAX_VALUE代表int的最大数值
System.out.println(number1);
System.out.println(“number1 + 1 =” +(number1 +1)); //若输出的数超出int范围后,会溢出,输出后为负数,
//long型变量举例
//x = 1000L; //上面x变量为int,此时赋值long,会报错,IDE提示不相容的类型
//float 类型举例
float numFloat1 ;
//numFloat1 = 1.23; //1.23后面若不加f。会提示错误,因为变量是float,不加f默认是双精度d
numFloat1 = 1.23f;
double numDouble1 = 1.2345; //不加d,默认是双精度d
System.out.println(numFloat1);
System.out.println(numDouble1);
//字符 char 类型举例, 字符‘a’就对应数值 97
char ch1 = ‘a’;
char ch2 = 97;
System.out.println(“ch1=” + ch1); //打印时的双引号中的“ch1 +”代表是字符串,会直接打印出来
System.out.println(“ch2=” + ch2);
char ch3 = ‘A’;
char ch4 = ‘A’ + 1; //即ch4 等于‘A’的编码再加1
System.out.println(“ch3=” + ch3);
System.out.println(“ch4=” + ch4);
char ch5 = ‘1’; //带单引号代表为 1 这个字符
char ch6 = 1; //代表 编码=1 的字符
char ch7 = 49;
System.out.println(“ch5=” + ch5); //输出为1
System.out.println(“ch6=” + ch6); //可以看到没有输出,因为编码1的字符为不可打印字符
System.out.println(“ch7=” + ch7); //输出后也为1,说明1 这个字符的编码为49
char ch8 =’\’’; //表示 单引号这个字符时,需要用转义符号 反斜杠
System.out.println(“ch8=” + ch8);
//类型转换
double numDouble = 3.56;
// int numInt = numDouble ; //这种方法提示错误,需要强制转换
int numInt = (int) numDouble ;
System.out.println(“numInt=” + numInt);
//在计算的时候也会自动转换,如下
System.out.println(“10/3=” + (10/3)); //输出3,因为两个操作数10,3都是int类型,所以结果也是int类型
System.out.println(“10/3.0=” + (10/3.0));
/*以上输出3.333。。为double浮点型,因为除数3.0为double型,
java会把被除数10页转为double型,所以结果为double型。
java把低级别的数据类型转换为高级别的,结果也为高级版的数据类型
*/
//输入输出举例:
double numDouble2 = 49.45678012;
System.out.printf(“numDouble2 is %10.5f”,numDouble2 ); //%10.5f代表输出浮点型,小数点保留5位
// //输入举例
// System.out.println(“Please input a double number!”); //提示语
// Scanner reader =new Scanner(System.in);
// //Scanner这个类需要引入进来 import java.until.Scanner;
// //或者鼠标放在Scanner 上,直接 alt +enter 即可引入
// double numDouble3;
// numDouble3 = reader.nextDouble(); //读取用户的输入赋值给numDouble3
// System.out.printf(“the input double number is %10.3f”,numDouble3);
//运算符举例
System.out.println(“10/3=” + (10/3));
System.out.println(“-10%3=” + (-10%3));
// a++,和 ++a举例
int num1 = 50;
int num2 = 50;
System.out.println(“num1++ =” + (num1++));
System.out.println(“num1=” + num1);
System.out.println(“++num2 =” + (++num2));
System.out.println(“num2=” + num2);
//关系运算符举例
System.out.println(“3>1 is” +(3 > 1));
System.out.println(“6<5 is” +(6 < 5));
//位运算符举例
int m = 3; // 00000000 00000000 00000000 00000011
int n = 6; // 00000000 00000000 00000000 00000110
int resultAnd = m & n; //位与运算
System.out.println(“resultAnd=” + resultAnd);
// 00000000 00000000 00000000 00000010 即2
System.out.println(“3 >> 1 =” + (3 >> 1));
//3 右移1位, 即00000011 变为 00000001,即1
//三元运算符举例
int statement = 20;
int result1 = statement > 10 ? 1:0;
int result2 = statement < 10 ? 1:0;
System.out.println(“result1=” + result1);
System.out.println(“result2=” + result2);
}
}
以下为在IDE中输出结果