运算符
概述:
java中使用数据进行数学运算时使用的符号,大部分符号都有自己的算数功能 。
分类:
普通的算数运算:
+:1、表示正数 。2、表示加法运算。 3、遇到了字符串数据表示拼接字符串。
-:1、表示负数。 2、表示减法运算。
*:表示乘法运算。
/: 表示除法运算 。
%: 表示取余数运算【java叫模运算】。
代码示例:
public class ArithmeticOperator {
public static void main(String[] args) {
// 普通算数运算符
int i = 250;
double d = 2.5;
System.out.println(+i);// 250
System.out.println(i + 23);// 273
System.out.println("大庆" + i );// 大庆250
System.out.println(-i);// -250
System.out.println(i - 23);// 227
System.out.println(i * 3); // 750
System.out.println(i / 4.0); // 62.5
System.out.println(i % 4); // 2
// 注意:
// 1、两个相同的数据类型的数据运算的时候结果还是这个数据类型 【byte short char除外】
// 2、两个不同数据类型的数据进行运算的时候结果以大数据类型为 主
System.out.println(d + i);// 252.5
byte b1 = 12;
byte b2 = 12;
short s1 = 13;
char ch = 'a';
int b3 = b1 + b2 ;
int s2 = b1 + s1 ;
int s3 = b2 + ch;
int s4 = s1 + ch;
int ch1 = ch * 2;
double d2 = b1 + d;
// byte char short 在做数学运算的时候会自动的提升数据类型为
int进行运算
}
}
特殊的算数运算
java自己独有的,只使用于数字变量
++:自增运算符
含义:给变量本身的值增加1并更新
–:自减运算符
含义:给变量本身的值减1并更新 。
使用规则: 1、符号可以使用在变量的前面或者后面
2、自增单独使用的时候符号使用在前面和后面结果都一样
3、自增自减运算和其他运算混合使用:
符号使用在变量前: 先执行变量的自增或自减,然后使用自增自减后结果值去参与其他运算 。
符号使用在变量后: 先使用变量的初始值参与其他的运算,然后进行自增自减 。
代码示例:
public class ArithmeticOperator {
public static void main(String[] args) {
int num = 100;
// num++;// 自增完事
//++num;
//System.out.println(num);// 101 输出的自增之后的值
// System.out.println(num++);// 100 输出的是自增之前的值
System.out.println(++num);// 101 输出的是自增之后的值
System.out.println(num);// 101 输出的自增之后的值
int sum = num++ - num-- * ++num % 3 - --num * 5;
// num = 101 102 101 102 101
// sum = 101 - 102 * 102 % 3 - 101 * 5;
// sum = 101 - 0 - 505; -404
}
}
赋值运算符
概述:
是使用在变量上 ,给变量存放数据的 。
分类:
普通赋值运算符:
= :赋值符号 把符号后边的数据存放到左边的变量中【作用:存值或修改值】。
扩展赋值运算符:
+= ;-=; *=; /= ;%=。
执行过程:
1、使用变量原始值和符号右边的数据进行符号中对应的算数运算【自带强制转 换】。
2、把运算的结果重新赋值给符号左边的变量 。
代码示例:
public class AssignmentOperatorDemo {
public static void main(String[] args) {
// 定义一个变量
int num = 250;// 使用普通赋值运算符
// 使用扩展赋值运算符
num += 200;// num = num + 200;
System.out.println(num);// 450
num -= 300;
System.out.println(num);// 150
num *= 4 ;
System.out.println(num);// 600
num /= 9 ;
System.out.println(num);// 66
num %= 4 ;
System.out.println(num);// 2
byte b = 125;
//b = (byte)(b + 2);
b += 2;// b = (byte)(b + 2) == b += 2吗?
System.out.println(b);// 127
}
}
比较运算符
概述:
用于比较两个数据之间的大小关系的符号,java中的比较运算符就是数学中的比较运算符 ,所以使用和数学中的比较运算符是一样,比较运算符运算的结果是布尔类型一种结果。
符号:
< ;>; >=; <=;==。
注意:
< ;<=; > ;>= 只能比较数字类型数据【一般指的是 整数 小数 字符】。
== != 可以比较任意数据类型的数据。
代码示例:
public class ComparisonOperatorDemo {
public static void main(String[] args) {
// 比较运算符 对数学运算符学习
int num1 = 200;
int num2 = 250;
System.out.println(num1 < num2);// true
System.out.println(num1 <= num2);// true
System.out.println(num1 > num2);// false
System.out.println(num1 >= num2);// false
System.out.println(num1 == num2);// false
System.out.println(num1 != num2);// true
// 比较运算符只能同时比较两个数据
String name1 = "金莲";
String name2 = "大郎";
// 字符串使用 > >= < <= 不能比较 使用 == != 就可以比较
System.out.println(name1 != name2);// true
System.out.println(name1 == name2);// false
}
}
逻辑运算符
概述:
逻辑运算就是表示两个数据之间组合后的或者、并且、非关系运算的符号
符号:
逻辑与【&】:表示并且的关系 。
执行原则: 有假则假 全真则真 。
执行过程: 前后两者表达式的结果都要去执行,然后得到最终的结果 。
逻辑或【|】:表示或者关系 。
执行原则: 有真则真 ,全假则假 。
执行过程: 前后两者表达式的结果都要去执行,然后得到最终的结果 。
逻辑非【!】:表示取反的关系
为了提升逻辑与和逻辑或的执行效率出现了短路与和短路或 。
短路与【&&】
执行过程: 如果第一个表达式的结果为false, 第二个表达式不会执行得出最终结果false。如果第一个表达式的结果为true,第二个表达式继续执行得出最终结果 。
短路或【||】
执行过程: 如果第一个表达式的结果为true,第二个表达式不会执行得出最终结果true。如果第一个表达式的结果为false,第二个表达式继续执行得出最终结果。
代码示例:
public class LogicalOperatorDemo {
public static void main(String[] args) {
// 逻辑关系【true和false直接的逻辑组合关系】
int num = 2;
System.out.println(3 < 5 & true);// true
System.out.println(true & false);// false
System.out.println(false & num++ > 0);// false
System.out.println(false & num++ < 0);// false
System.out.println(num);// 4
// 短路与【&&】
System.out.println(false && num++ > 0);// false
System.out.println(false && num++ < 0);// false
System.out.println(num);// 4
System.out.println("===============");
System.out.println(3 < 5 | num++ > 0);// true
System.out.println(true | num++ < 0);// true
System.out.println(false | true);// true
System.out.println(false | false);// false
System.out.println(num);// 6
// 短路或【||】
System.out.println(3 < 5 || num++ > 0);// true
System.out.println(true || num++ < 0);// true
System.out.println(num);// 6
System.out.println("------------");
System.out.println(!!(3 < 5));// false
}
}
三元运算符(三目运算符)
概述:
本身不是一个符号,可以理解为是一个表达式,用来对某个条件进行判断,根据结果选择对应的结果的一种运算。
语法格式: 表达式1 ? 表达式2: 表达式3 ;
执行流程: 判断表达式1是否成立
成立:选择表达式2的结果作为三元表达式的最终结果 。
不成立:选择表达式3的结果作为三元表达式的最终结果 。
案例: 使用三元运算符求取3个数的最值 。
分析: 最大值: 先比较两个数的最大值 ,然后使用最大值和第三个数比较得出最大值 ,两个数的最大值怎么比?使用三元运算符做假设比较 ,根据结果取最大值 。
代码示例:
public class TernaryOperatorDemo {
public static void main(String[] args) {
int num1 = 250;
int num2 = 360;
int num3 = 361;
// 开始求最大值
int max = num1 > num2 ? num1 : num2;
// 把num1和num2的最大值 放到了max变中
// 使用num1 和 num2 的最大值max 和num3 进行比较求出最大值
max = max < num3 ? num3 : max ;
// max 和num3 的最大值放到max变量中
// max = (num1 > num2 ? num1 : num2) < num3 ? num3 : (num1> num2 ? num1 : num2) ;
// max 和num3 的最大值放到max变量中
// 比较完毕 max中就是三个数的最大值
System.out.println("三个数的最大值为:" + max);
// 最小值
int min = num1 < num2 ? num1 : num2;
int min1 = min < num3 ? min : num3;
System.out.println("三个数值的最小值为" + min1);
}
}
位移运算符
概述:
只适用于整数的数学运算,根据数制位的移动来进行数字翻倍运算的。 计算机的相邻数制位的关系是2倍关系, 运算速度比算数运算的翻倍快。
符号:
左位移【<<】:数字整体向左边移动一个数制位, 数字扩大2倍。
右位移【>>】:数字整体向右边移动一个数制位, 数字缩小2倍。
无符号右位移【>>>】:数字整体向右边移动一个数制位 ,数字缩小2倍 。
注意: 无符号右位移只能使用于正整数, 负整数不能用 ,正整数右位移到头值是0 ,负整数右位移到头值是-1
代码示例:
public class ShiftOperatorDemo {
public static void main(String[] args) {
int num = 2; // 二进制的数 0000 0010 --> 100 1000
// num向左移动了一个数制位
System.out.println(num << 1);// 4
System.out.println(num << 2);// 8
System.out.println(num >> 1);// 1 10 --> 1
System.out.println(num >> 2);// 0 10 --> 0
int num1 = -2 ; // 1000 0010
System.out.println(num1 << 1);// -4
System.out.println(num1 << 2);// -8
System.out.println(num1 >> 1);// -1
System.out.println(num1 >> 3);// -1
System.out.println(num >>> 2);// 0
System.out.println(num1 >>> 2);// -1 只能用于正整数
}
}