文章由《大牛1对1学院》书写,保留所有权利,如有转载请注明来源。
如果你对内容有更好的建议,请联系我们。
大于号,>,
小于号,<。
一头大来一头小。
张开大嘴吃大的,
闭上小嘴吃小的。
——摘自小学课本。
先算加减,后算乘除,最后算括号。
——摘自小学课本。
上边两个运算符口诀你是否还历历在目,这是我们小学学习数学运算时的规则。
在Java中,运算符的规则和我们经常使用的数学运算符的运算规则完全一样。
5.1 常量和变量
5.1.1 常量
在一段程序或项目中,其值始终保持不变的量叫做常量,使用关键字final修饰。常量分为两种,一种是Java已经定义的常量,如:圆周率;另一种是用户自己定义的常量。
示例代码:
package com.chapter3;
public class Constant {
public static void main(String[] args) {
//定义一个常量
final String projectName = "Hello World Project";
// 输出自己定义的常量
System.out.println(projectName);
// 输出Java中已经定义的常量 圆周率:派
System.out.println(Math.PI);
}
}
运行结果:
Hello Word Project
3.141592653589793
常量是保持不变的量,当你对常量进行再次赋值时,会出现如下提示:
The final field 常量名 cannot be assigned
并且,IDE也会提示你无法再次赋值。
5.1.2 变量
在一段程序或项目中,其值会发生改变的量叫做变量。声明一个变量时,需要进行初始化后方可使用。
示例代码:
package com.chapter3;
public class Variable {
public static void main(String[] args) {
//定义一个变量 number
int number = 10;
//输出变量 number
System.out.println(number);
// 更改number的值
number = 20;
System.out.println(number);
// 未进行初始化的变量,不可直接使用
//int numberNoInit;
//System.out.println(numberNoInit);
}
}
运行结果:
10
20
5.2 表达式
在Java中,常量、变量、使用运算符连接起来的式子、一句代码都是表达式。
如下都是表达式:
100
true
"Java"
1+1
5.3 运算符
在Java种有赋值运算符、算数运算符(包括自增自减运算符)、关系运算符、逻辑运算符、三元运算符、位运算符、移位运算符等8种运算符。
5.3.1 赋值运算符
一个等号(=)符号在Java中是赋值运算,即把符号右边的运算结果赋值给等号左边的变量或常量。赋值运算符在编程工作中随处可见。
示例代码如下:
int result = 10 + 1;
正确的读法是:把10+1的结果11赋值给int类型的变量result。
赋值运算符的分类
赋值运算符有以下几类:
示例代码:
package com.chapter5;
public class AssignmentOperator {
public static void main(String[] args) {
int it = 10;
int itt = 100;
// 进行数学算数运算
int itit = it + itt;
System.out.println(itit);
itt += 1;
System.out.println(itt);
}
}
运行结果:
110
101
5.3.2 算数运算符
算数运算符包括加(+)、减(-)、乘(*)、除(/)、求余(%)等5个运算,这些运算操作的主要是数值型的基本数据类型,和我们熟悉的常见数学运算是一样的。
示例代码:
package com.chapter5;
public class ArithmeticOperator {
public static void main(String[] args) {
int a = 100;
int b = 200;
// a加b
int ab = a + b;
System.out.println(ab);
// a减b
int aPlusB = a - b;
System.out.println(aPlusB);
// a乘以b
int aMutiB = a * b;
System.out.println(aMutiB);
// a除以b
int aDivideB = a / b;
System.out.println(aDivideB);
// a对于b求余
int aRemainderB = a % b;
System.out.println(aRemainderB);
}
}
运行结果:
300
-100
20000
0
100
数据类型的自动提升
在进行算数计算时,对多个不同基本数据类型的值进行操作时,如果运算结果所使用的数据类型超过原来的数据类型,那么算数表达式的结果的数据类型会自动提升,以满足结果的表达需要。
提升规则如下:
byte、short、char —> int —> long —> float —> double
示例代码:
package com.chapter5;
public class ArithmeticOperatorPro {
public static void main(String[] args) {
int in = 10;
char ch = 'A'; // 'A'=65
// 错误的表示
// char inch = in + ch;
// 正确的表示
int inch = in + ch;
System.out.println(inch);
}
}
运行结果:
75
可看到in是int类型,ch是char类型,其运算结果是int类型,已经超过了ch的char类型,这就是数据类型的自动提升。
5.3.3 自增自减运算符
自增自减运算符表示在变量本身基础上,自己增加或减少一个数量。自增自减运算符在编程工作中比较常用。
有以下两种:
符号 作用 举例说明
示例代码:
package com.chapter5;
public class AutoAddSub {
public static void main(String[] args) {
int it = 100;
// it 在原 100 上,自己增大 1,结果就是101
it++;
System.out.println(it);
int itit = 10;
// it 在原 10 上,自己减小 1,结果就是9
itit--;
System.out.println(itit);
}
}
运行结果:
101
9
++i 和 i++ 的区别
++i是先自增后赋值, i++是先赋值后自增。
示例代码:
package com.chapter5;
public class AutoAddSubNote {
public static void main(String[] args) {
int it = 100;
// 操作顺序:先赋值,后自增
int tj = it++;
System.out.println("it:" + it);
System.out.println("tj:" + tj);
int itt = 10;
// 操作顺序:先自增,后赋值
int ittj = ++itt;
System.out.println("itt:" + itt);
System.out.println("ittj:" + ittj);
}
}
运行结果:
it:101
tj:100
itt:11
ittj:11
5.3.4 关系运算符
关系运算符用于比较两个值(表达式)的大小,其结果是布尔类型,关系运算符在编程工作中十分常见。
示例代码:
package com.chapter5;
public class RelationalOperator {
public static void main(String[] args) {
int it = 100;
int itit = 200;
//判断是否小于
boolean rl = it < itit;
System.out.println(rl);
}
}
运行结果:
true
5.3.5 逻辑运算符
如果我们在Java中表示1<x<10,那么就用到了逻辑运算符,把它拆解位1<x且x<10。逻辑运算符在编程中比较常用。
示例代码:
package com.chapter5;
public class LogicShortOperator {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// 逻辑与
System.out.println(a & b);
// 短路逻辑与
System.out.println(a && b);
// 逻辑或
System.out.println(a | b);
// 短路逻辑或
System.out.println(a || b);
}
}
运行结果:
false
true
false
短路逻辑运算符
注意事项:
加入a、b是参与短路逻辑运算的两个元素。
- 逻辑与&:a、b都进行计算;
- 短路与&&:如果a真,b计算,如果a假,b不计算;
- 逻辑或|:a、b都进行计算;
- 短路或||:如果a真,b不计算,如果a假,b计算。
示例代码
package com.chapter5;
public class LogicShortOperator {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// 逻辑与
System.out.println(a & b);
// 短路逻辑与
System.out.println(a && b);
// 逻辑或
System.out.println(a | b);
// 短路逻辑或
System.out.println(a || b);
}
}
运行结果:
false
false
true
true
5.3.6 三元运算符
三元运算符在编程工作中比较常见,它的格式如下:
布尔表达式 ? 表达式1 : 表达式2
运算规则:
- 计算关系表达式的值;
- 值为true,结果为表达式1的值;
- 值为false,结果为表达式2的值。
示例代码:
package com.chapter5;
public class TernaryOperator {
public static void main(String[] args) {
int a = 1;
int b = 2;
// 关系表达式?表达式1:表达式2
int ternary = a > b ? 10 : 20;
System.out.println(ternary);
}
}
运行结果:
20
5.3.7 位运算符
在数据类型的开篇中,我们知道了计算机是使用二进制表示数据的,其存储单元是位(bit),又称为比特位。
位运算符就是对数据的比特位进行操作,只能适用于整数类型。
示例代码:
package com.chapter5;
public class BitOperator {
public static void main(String[] args) {
int a = 3; //二进制 0 0 1 1
int b = 6; //二进制 0 1 1 0
//进行与运算,二进制 0 0 1 0 = 十进制的 2
int result = a & b;
System.out.println(result);
}
}
运行结果:
2
5.3.8 移位运算符
移位运算符也是对二进制的数据进行操作的,也只能适用于整数类型。通过移动原来二进制的数据,其值发生了变化,组后得出一个新值。
示例代码:
package com.chapter5;
public class BitMoveOperator {
public static void main(String[] args) {
int a = 3 << 1;
//3 的二进制 0 0 1 1
//左边移动1位 0 1 1 0 = 十进制的6
System.out.println(a);
}
}
运行结果:
6
5.4 运算符的优先级
Java的运算符存在优先级别,级别高的运算符先执行运算,级别低的运算符后执行运算。他们的优先级关系如下表:
上表优先级为1的表示级别最高。这张表看似十分复杂,不过你没有必要强制记忆。随着编程经验的熟悉你会慢慢记住他们的使用级别。
示例代码:
package com.chapter5;
public class OperatorPriority {
public static void main(String[] args) {
int m = 10;
int n = 100;
// false && true
boolean tag1 = m > n && m < n;
System.out.println("tag1:" + tag1);
/*
false && true
可以养成使用小括号的习惯,这样更加直观理解
*/
boolean tag2 = (m > n) && (m < n);
System.out.println("tag2:" + tag2);
}
}
运行结果:
tag1:false
tag2:false
5.5 总结
其值始终保持不变的量叫做常量,使用关键字final修饰。
其值会发生改变的量叫做变量,需要进行初始化后方可使用。
常量、变量、使用运算符连接起来的式子、一句代码都是表达式。
在Java种有赋值运算符、算数运算符(包括自增自减运算符)、关系运算符、逻辑运算符、三元运算符、位运算符、移位运算符等8种运算符。
一个等号(=)符号是赋值运算,把符号右边的运算结果赋值给等号左边的变量或常量。
算数运算符包括加(+)、减(-)、乘(*)、除(/)、求余(%)等5个运算,操作的主要是数值型的基本数据类型。
自增自减运算符表示在变量本身基础上,自己增加或减少一个数量。
关系运算符用于比较两个值(表达式)的大小,其结果是布尔类型。
逻辑运算符有与、或、异或、非、短路与、短路或等6个,其结果是布尔类型。
三元运算符的格式是:布尔表达式?表达式1:表达式2,根据布尔表达式的结果返回其中一个表达式的值。
位运算符和移位运算符都是对比特位进行操作的,只能适用于整数类型。
Java的运算符存在优先级别,级别高的运算符先执行运算。
5.6 作业与思考
思考一:常量可以不用final修饰吗?
作业一:练习8种运算符的使用。
作业二:练习体验运算符的优先级。
文章由《大牛1对1学院》书写,保留所有权利,如有转载请注明来源。
如果你对内容有更好的建议,请联系我们。