Java 算术运算符 关系运算符 逻辑运算符 赋值类运算符 字符串连接运算符 三元运算符
算术运算符
/* 关于java编程中运算符之:算术运算符 + 求和 - 相减 * 乘积 / 商 % 求余数【取模】 ++ 自加1 -- 自减1 注意: 一个表达式当中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。 没有必要去专门记忆运算符的优先级。 */ public class OperatorTest01 { public static void main(String[] args){ int i = 10; int j = 3; System.out.println( i + j ); // 13 System.out.println( i - j ); // 7 System.out.println( i * j ); // 30 System.out.println( i / j ); // 3 System.out.println( i % j ); // 1 // 以下以++为例,--运算符一样~ // 关于++运算符【自加1】 int k = 10; // ++运算可以出现变量的后面【单目运算符】 k ++; System.out.println(k); // 1 int y = 10; // ++运算可以出现变量的q前面【单目运算符】 ++ y; System.out.println(k); // 1 // 小结: // ++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后 // 只要++运算结束,该变量中的值一定会自加1 // ++ 出现在变量后 // 规则:先做赋值运算,再对变量中保存的值进行自加1 int a = 100; int b = a ++; System.out.println(a); // 101 System.out.println(b); // 100 // ++ 出现在变量前 // 规则:先进行自加1运算,然后再进行赋值操作。 int m = 20; int n = ++ m; System.out.println(m); // 21 System.out.println(n); // 21 int xx = 500; System.out.println(xx); int e = 100; System.out.println(e ++); // 100 System.out.println(e); // 101 int s = 100; System.out.println(++s); // 101 System.out.println(s); // 101 System.out.println(--s); // 100 System.out.println(s++); // 100 System.out.println(s--); // 101 System.out.println(s--); // 100 System.out.println(s--); // 99 System.out.println(s); // 98 } }
关系运算符
/* 关系运算符: > 大于 >= 大于等于 < 小于 <= 小于等于 == 等于 != 不等于 = 是赋值运算符 == 是关系运算符 关系运算符的运算结果一定是布尔类型;true/false 关系运算符的运算原理: int a = 10; int b = 10; a > b 比较的时候,比较的是a中保存的10这个值和b中保存的10这个值之间的大小比较。 a == b 也是如此。 */ 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 } }
逻辑运算符
/* 关于逻辑运算符: & 逻辑与【并且】 (两边的算子都是true,结果才是true) | 逻辑或【或者】 (两边的算子只要有一个是true,结果就是true) ! 逻辑非 (取反,!false就是true,!true就是false,就是一个单目运算符) ^ 逻辑异或 (两边的算子只要不一样,结果就是true) && 短路与 || 短路或 1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型。 2、短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象。 3、短路或和逻辑或最终的运算结果是相同的,只不过短路与存在短路现象。 4、什么情况下发生短路现象呢? 5、什么时候选择使用逻辑与运算符?什么时候选择使用短路与运算符? */ public class OperatorTest03 { public static void main(String[] args){ // 运算符优先级不确定,加小括号 System.out.println(5 > 3 & 5 > 2 ); // true System.out.println(5 > 3 & 5 > 6 ); // false System.out.println(5 > 3 | 5 > 6 ); // true System.out.println(true & true ); // true System.out.println(true & false ); // false System.out.println(false & true ); // false System.out.println(false & false ); // false System.out.println(true | false ); // true System.out.println(false & false ); // false System.out.println(!false); // true System.out.println(!true); // false System.out.println(true ^ false ); // true System.out.println(false ^ false ); // false System.out.println(true ^ true ); // false // 逻辑与和短路与 int x = 10; int y = 8; // 逻辑与 System.out.println( x < y & ++x < y ); System.out.println(x); // 11 // 逻辑与和短路与 int x = 10; int y = 8; // 短路与 // x < y 结果是false,整个表达式结果已经确实是false // 所有后面的表达式没有再执行,这种现象被称为短路现象。 // 短路与才会有短路现象,逻辑与是不会存在短路现象的, System.out.println( x < y & ++x < y ); System.out.println(x); // 10 /* 1、从某个角度来看,短路与更智能,由于后面的表达式可能不执行,所以执行效率较高,这种方式在实际的开发中使用较多,短路与比逻辑与使用的多,短路与更常用。 2、但是,在某些特殊的业务逻辑当中,要求运算符两边的算子必须全部执行,此时必须使用逻辑与,不能使用短路与,使用短路与可能导致右边的表达式不执行 什么情况下发生短路或? - 第一个表达式执行结果是true,会发生短路或 什么情况下发生短路与? - 第一个表达式执行结果是false,会发生短路与 */ } }
赋值类运算符
/* 关于java中的赋值类运算符: 赋值类运算符包括两种: - 基本的赋值运算符 = - 扩展的赋值运算符 += -= *= /= %= 1、赋值类的运算符优先级,先执行等号右边的表达式,将执行结果赋值给左边的变量。 2、注意以下代码: byte i = 10; i += 5; 等同于:i = (byte)(i + 5); int k = 10; k += 5; 等同于:k = (int)(k + 5); long x = 10L; int y = 20; y += x; 等同于:y = (int)(y + x); 3、重要结论:扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,无论怎么进行追加或追减,最终改变量的数据类型还是byte类型。 */ public class OperatorTest04 { public static void main(String[] args){ // 基本的赋值运算符 int i = 10; System.out println(i); // 10 i = i + 5; System.out.println(i); // 15 // 扩展的赋值运算符【+= 运算符可以翻译为“追加/累加”】 i += 5; // 等同于:i = i + 5; System.out.println(i); // 20 i -= 5; // 等同于:i = i - 5; System.out.println(i); // 15 i *= 2; // 等同于:i = i * 2; System.out.println(i); // 30 i /= 4; // 等同于:i = i / 4; System.out.println(i); // 7 i %= 2; // 等同于:i = i % 2; System.out.println(i); // 1 //-------------------------------------------------------- // 10没有超出byte取值范围,可以直接赋值 byte b = 10; // b = 15; // 可以编译通过,15没有超出byte取值范围 // 编译错误,为什么? // 编译器只检查语法,不运行程序,编译器发现b+5的类型是int类型,b变量的数据类型是byte // 大容量向小容量转换需要加强制类型转换符,所以以下程序编译错误 // b = b + 5; // 纠正错误 b = (byte)(b + 5); System.out.println(b); // 15 byte x = 10; x += 5; // 等同于 x = (byte)(x + 5),其实并不等同于:x = x + 5 System.out.println(x); // 15 byte z = 0; z += 128; // 等同于 z = (byte)(z + 128); System.out.println(z); // -128 【损失精度】 z += 10000; // 等同于 z = (byte)(z + 10000); System.out.println(z); // -112 【损失精度】 } }
字符串连接运算符
/* 关于java中的“+”运算符: 1、+运算符在java语言当中有两个作用: - 加法运算,求和 - 字符串的连接运算 2、当“+”运算符两边的数据都是数字的话,一定是进行加法运算。 3、当“+”运算符两边的数据只要有一个数据是字符串,一定会进行字符串连接运算,并且,连接运算之后的结果还是一个字符串类型。 数字 + 数字 ---> 数字【求和】 数字 + "字符串" ---> "字符串"【字符串连接】 4、在一个表达式当中可以出现多个“+”,在没有添加小括号的前提之下,遵循自左向右的顺序依次运算。 */ public class OperatorTest05 { public static void main(String[] args){ System.out.println(10 + 20); // 30 这里的加号是求和 System.out.println(10 + 20 + 30); // 60 这里的加号也是求和 System.out.println(10 + 20 + "30"); // "3030" 自左向右的顺序依次运算,第一个加号是求和,第二个加号是字符串 System.out.println(10 + (20 + "30")); // "102030" int a = 10; int b = 10; // 要求在控制台上输出 "10 + 20 = 30" System.out.println("10 + 20 = 30"); // 注意:要求以动态的方式输出 System.out.println("10 + 20 = " + a + b); // "10 + 20 = 1020" System.out.println("10 + 20 = " + (a + b)); System.out.println("a + 20 = " + (a + b)); System.out.println(a + " + 20 = " + (a + b)); System.out.println(a + " + " + b + " = " + (a + b)); // 引用类型String // String是SUN在JavaSE当中提供的字符串类型 // String.class字节码文件 // int是基本数据类型,i是变量名,10是int类型的字面值 int i = 10; // String是应用数据类型,s是变量名,"abc"是String类型的字面值 // String s = "abc"; // 定义一个String类型的变量,起名username,赋值 "张三" String username = "张三"; System.out.println("登陆成功,欢迎" + username + "回来"); // 登陆成功,欢迎张三回来 username = "jack"; System.out.println("登陆成功,欢迎" + username + "回来"); // 登陆成功,欢迎jack回来 } }
三元运算符
/* 三元运算符/三目运算符/条件运算符 1、语法规则: 布尔表达式 ? 表达式1 : 表示式2 2、三元运算符的执行原理? 当布尔表示的结果是true的时候,选择表达式1作为整个表达式的执行结果 当布尔表示的结果是false的时候,选择表达式2作为整个表达式的执行结果 */ public class OperatorTest06 { public static void main(String[] args){ // 编译错误:不是一个完整的java语句 // 10; // 编译错误:不是一个完整的java语句 // '男'; // 布尔类型的变量 boolean sex = false; // 分析以下程序是否可以编译通过? // 编译报错,因为它不是一个完整的java语句 // sex ? '男' : '女'; char c = sex ? '男' : '女'; System.out.println(c); sex = true; c = (sex? '男' : '女'); System.out.println(c); // 语法错误,编译报错,结果可能是String,也可能是char,但是前边不能用char来接受数据。 // char c1 = sex? "男" : '女'; // 编译错误,类型不兼容 /* sex = false; char c1 = sex? "男" : '女'; */ System.out.println(10); System.out.println("10"); System.out.println('1'); // 可以 System.out.println(sex ? '男' : "女"); String s = sex ?("男的" : "女的"); System.out.println(s); } }