前言
运算符在我们开始上学的时候就开始见到了,记得一开始接触的是加法‘+’和减法‘-’,然后一步一步加深,对运算符这方面的知识一步一步慢慢的了解的更多了,所以这篇博客相当于对以前知识的总结。
内容
什么是运算符: 对变量进行操作的符号
运算符的分类: 算数运算符 , 赋值运算符 , 比较运算符 , 逻辑运算符 , 三元运算符
1. 算数运算符
算数运算符包括:
符号 | 表示 |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ 、 – | 自增自减运算 |
public class Demo01Operater {
public static void main(String[] args) {
// 定义变量
int a = 5;
int b = 3;
System.out.println(a + b); // 8
System.out.println(a ‐ b); // 2
System.out.println(a * b); // 15
System.out.println(a / b); // 1.66666?
System.out.println(a % b); // 2
System.out.println("‐‐‐‐‐‐‐‐‐");
// 整数相除,结果是整数,要得到小数,必须有小数参与运算
System.out.println(5.0 / 3); // 1.6666666666666667
System.out.println(5 / 3.0); // 1.6666666666666667
}
}
Java中,整数相除结果是整数。
public static void main(String[] args) {
int i = 1234;
System.out.println(i / 1000 * 1000); //计算结果是?
}
求余“%”非常有意思,来个有趣的问题:
System.out.println(5 % 3); // ?
System.out.println(‐5 % 3); // ?
System.out.println(5 % ‐3); // ?
System.out.println(‐5 % ‐3); // ?
求余运算结果符号跟前面的数符号相同。
++ 运算:变量自己增长1。反之, – 运算,变量自己减少1,用法与 ++ 一致。
-
- 独立运算:
- 变量在独立运算时, 前++ 和 后++ 没有区别 。
- 变量 前++ :例如 ++i 。
- 变量 后++ :例如 i++ 。
-
- 混合运算:
- 和其他变量放在一起, 前++ 和 后++ 就产生了不同
- 变量 前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2
public static void main(String[] args) {
int a = 1;
int b = ++ a; //先++,后=赋值
System.out.println(a); //计算结果是2
System.out.println(b); //计算结果是2
}
- 变量 后++ :例如 i++ 。
public static void main(String[] args) {
int a = 1;
int b = a ++; //先=赋值,后++
System.out.println(a); //计算结果是2
System.out.println(b); //计算结果是1
}
来个有趣的问题:
// 面试题:
int a = 10;
int b = 10;
int c = 10;
a = b++;
// a = 10, b = 11
c = ‐‐a;
// a = 9, c = 9
b = ++a;
// a = 10, b = 10
a = c‐‐;
// a = 9, c = 8
// 请分别计算出a,b,c的值
-
- +符号在字符串中的操作:
- +符号在遇到字符串的时候,表示连接、拼接的含义。
- “a”+"b"的结果是“ab”,连接含义
public static void main(String[] args) {
// + 遇到字符串表示连接
System.out.println("abc" + "def");
System.out.println("abc" + 5);
System.out.println("abc" + 5 + 5); // 1. "abc" + 5 = "abc5"; 2. "abc5" + 5 = "abc55"
System.out.println("abc" + (5 + 5)); // 1. 5 + 5 = 10; 2. "abc" + 10 = "abc10"
System.out.println(5 + 5 + "abc"); // 1. 5 + 5 = 10; 2. 10 + "abc" = "10abc"
}
来个有趣的问题:
System.out.println("5+5="+5+5); //输出?
2. 赋值运算符
赋值运算符包括:
符号 | 表示 |
---|---|
= | 赋值 |
+= | 加后赋值 |
-= | 减后赋值 |
*= | 乘后赋值 |
/= | 除后赋值 |
%= | 取模后赋值 |
赋值运算符,就是将符号右边的值,赋给左边的变量
public static void main(String[] args) {
// 定义变量
int i = 3; // 将3赋值给变量i
i = i + 2; // 将变量i和2相加,再赋值给变量i
System.out.println(i);
// +=: 赋值运算符, 将=左边的变量和=右边的值进行操作,再赋值给变量
int j = 10;
j += 5; // j = j + 5
System.out.println(j);
int m = 10;
m ‐= 5; // m = m ‐ 5;
System.out.println(m);
System.out.println("‐‐‐‐‐‐‐‐‐‐");
byte b = 1;
// b = b + 2; // 错误: 不兼容的类型: 从int转换到byte可能会有损失
// b += 2; // 可以
b = (byte)(b + 2);
System.out.println(b);
}
3. 比较运算符
比较运算符又叫关系运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。
**比较运算符包括: **
符号 | 表示 |
---|---|
== | 比较符号两边数据是否相等,相等结果是true。 |
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= | 比较符号左边的数据是否小于或者等于右边的数据,如果小于或等于结果是true。 |
>= | 比较符号左边的数据是否大于或者等于右边的数据,如果小于或等于结果是true。 |
!= | 不等于符号 ,如果符号两边的数据不相等,结果是true。 |
public static void main(String[] args) {
System.out.println(3==3); // true
System.out.println(3==4); // false
System.out.println(3!=4); // true
System.out.println(3>4); // false
System.out.println(3<4); // true
System.out.println(5<=4); // false
System.out.println(4>=4); // true
// 注意
int i = 3;
int j = 4;
System.out.println(i=j); // 将j赋值给i,输出i
System.out.println(i==j); // true
}
4. 逻辑运算符
逻辑运算符,是用来对两个布尔类型进行运算的,运算结果都是布尔值 true 或者 false
逻辑运算符包括:
与‘’&'、或'|'、 非'!'、 异或'^' 案例代码
public static void main(String[] args) {
// & 与: 有false则false, 要求很高 房 & 车
System.out.println(false & false); // false
System.out.println(false & true); // false
System.out.println(true & false); // false
System.out.println(true & true); // true
System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
// | 或: 有true则ture, 要求不是很高 房 | 车, 有房或车就可
System.out.println(false | false); // false
System.out.println(false | true); // true
System.out.println(true | false); // true
System.out.println(true | true); // true
System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
// ! 非: 取反
System.out.println(!true); // false
System.out.println(!false); // true
System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
// ^ 异或: 相同为false,不同为true, 同性不能领结婚证,异性才能领结婚证
System.out.println(false ^ false); // false
System.out.println(false ^ true); // true
System.out.println(true ^ false); // true
System.out.println(true ^ true); // false
}
短路与'&&'、短路或'||' 案例代码
public static void main(String[] args) {
// &&和&结果一样,左边是false右边不执行
System.out.println(false && false); // false
System.out.println(false && true); // false
System.out.println(true && false); // false
System.out.println(true && true); // true
System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
// ||和|结果一样,左边是true右边不执行
System.out.println(false || false); // false
System.out.println(false || true); // true
System.out.println(true || false); // true
System.out.println(true || true); // true
int i = 3;
int j = 4;
System.out.println(i == j && ++i > 2);
System.out.println(i); // 3
System.out.println(j); // 4
System.out.println(i != j || ++i > 2);
System.out.println(i); // 3
System.out.println(j); // 4
}
5. 三元运算符
三元运算符格式
数据类型 变量名 = 布尔类型表达式?结果1:结果2;
三元运算符计算方式:
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
public static void main(String[] args) {
int a = 30;
int b = 20;
int c = a > b ? 100 : 20;
System.out.println(c);
}
总结
public static void main(String[] args){
short s = 1;
s+=1;
System.out.println(s);
}
分析:
s += 1 逻辑上看作是 s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点,也就是说 s += 1 就是 s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2.
public static void main(String[] args){
byte b1=1;
byte b2=2;
byte b3=1 + 2;
byte b4=b1 + b2;
System.out.println(b3);
System.out.println(b4);
}
分析:
- b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。
- 反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。
在java中,运算符大致就是这些了,及时总结起来,方便以后回顾复习。
如何获取一个3位数的个位、十位、百位呢?
提示:可以使用求余的方法
Java要学的知识太多了,只有一步一步慢慢的丰富自己,成长自己。
end
谢谢您的阅读!