赞
踩
目录
运算符是构成Java语句的重要组成部分,运算符是一种特殊的符号, 用以表示数据的运算、 赋值和比较等。其分类如下:
- 算术运算符
- 赋值运算符
- 关系运算符 [比较运算符]
- 逻辑运算符
- 位运算符
- 三元运算符
算术运算符是对数值类型的变量进行计算的,如基本的加减乘除。
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +7 | 7 |
- | 负号 | b=3;-b | -3 |
+ | 加 | 3+8 | 11 |
* | 乘 | 6*6 | 36 |
/ | 除 | 5/5 | 1 |
% | 取模(取余) | 11%9 | 2 |
++ ++ | 自增(前):先运算后使用 自增(后):先使用后运算 | a=2;b=++a; a=2;b=a++; | a=3;b=3; a=3;b=2; |
- - - - | 自减(前):先运算后使用 自增(后):先使用后运算 | a=2;b=++a; a=2;b=a++; | a=1;b=1; a=1;b=2 |
+ | 字符串相加 | “hello”+“world” | “hello world” |
我们见如下代码:
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
-
- // /的使用
- System.out.println(10 / 4); //运算结果为2
- System.out.println(10.0 / 4); //运算结果为2.5
-
- double d = 10 / 4; //运行结果为2.0
- System.out.println(d);
- }
- }
通过上面的代码我们可以看出/操作符与我们之前在数学中的运算方式不同,比如第一个打印语句中的内容“10/4”,在我们之前的认识中其结果为2.5,但是最后的运行结果为2,这是因为对于“/”操作符来说如果左右两边的操作数都为整数其会将小数部分去除,保留整数部分,这是计算机的规则。
那么我们想要保留小数部分我们应该怎么做呢?我们只需要将其中一个或两个整数改为小数,这样就可以实现小数除法。例如第二个打印内容。
我们再来看“double d = 10 / 4;”语句,运算结果为2.0,我们一起来分析一下这个过程:先进行10/4的运算得到2,再进行隐式数据类型定义转换,将整型转换成double型。
我们再来看“%”的使用:
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
-
- // % 取模 ,取余
- System.out.println(-10 % 3);
-
- System.out.println(10 % 3);
-
- System.out.println(10 % -3);
-
- System.out.println(15 % -3);
- }
- }
% 的本质其实是一个公式:
a % b = a - a / b * b
我们先来分析-10 % 3。代入公式得:-10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
后面几条语句运算方式同上,可以自己动手算一算,语句结果如下:
这里只讲解前置++与后置++,因为++与--原理一致。看下面一段代码:
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
-
- //++的单独使用
- //
- int i = 10;
- i++;
- ++i;
- System.out.println("i=" + i);//12
-
- //++的表达式使用
- /*前++: ++i 先自增后赋值
- 后++: i++先赋值后自增*/
- int j = 8;
- int k = ++j;
- int a = 5;
- int b = a++;
- System.out.println("k=" + k + " j=" + j);
- System.out.println("a=" + a + " b=" + b);
- }
- }
当++单独使用时,无论是前置还是后置,都相当于 i = i + 1;而当其作为表达式语句时,前置与后置分别等价以下情况:
int j = 8; int k = ++j 等价于 j = j + 1; k = j;
int a = 5; int b = a++ 等价于 b = a; a = a++;
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 8 == 7 | false |
!= | 不等于 | 8 != 7 | true |
< | 小于 | 8 < 7 | false |
> | 大于 | 8 > 7 | true |
<= | 小于等于 | 8 <= 7 | false |
>= | 大于等于 | 8 >= 7 | true |
instanceof | 检查是否是类的对象 | “hhh” instanceof String | true |
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
-
- int a = 9;
- int b = 8;
- System.out.println(a > b); //T
- System.out.println(a >= b); //T
- System.out.println(a <= b); //F
- System.out.println(a < b);//F
- System.out.println(a == b); //F
- System.out.println(a != b); //T
-
- }
- }
关系运算符的结果都是boolean类型,也就是说结果要么是true,要么是false。关系运算符比较简单,还有一个注意的点是比较运算符“==”不要误写成赋值运算符“=”。
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值
a | b | a & b | a && b | a | b | a || b | !a | a ^ b |
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | true | false | false | false | false | true | false |
a&b:&-逻辑与 规则:a和b同时为true,则结果为true,否则为false
a&&b : &&-叫短路与 规则:当a和b同时为 true ,则结果为 true,否则为 false
a|b : |-叫逻辑或 规则: a和b只要有一个为 true ,则结果为 true,否则为 false
a || b : ||-叫短路或 规则:a和b只要有一个为 true ,则结果为 true,否则为 false
!a : !-叫取反,或者非运算。 当 a 为 true, 则结果为 false, 当 a 为 false 是, 结果为 true
a^b: ^-叫逻辑异或,当a和b不同时,则结果为 true, 否则为 false
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
- //&&短路与使用
- int age = 50;
- if(age > 20 && age < 90) {
- System.out.println("abcdefg");
- }
-
- //&逻辑与使用
- if(age > 20 & age < 90) {
- System.out.println("12345678");
- }
- }
- }
&和&&的判断条件一致,即只要当左右两边都为true时才为true。那么&与&&之间的区别是什么呢?区别如下:
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
- //||短路或使用
- int age = 50;
- if(age > 20 || age < 30) {
- System.out.println("abcdefg");
- }
-
- //&逻辑与使用
- if(age > 20 | age < 30) {
- System.out.println("12345678");
- }
- }
- }
|与||的判断条件也是一致的,我们来看看它们的区别:
在开发中比较常用的是&&与||。
!是取反操作即当原表达式为真时,取反后即为假,若原表达式为真,则相反。
^ 是逻辑异或,a^b,当a与b不同时,则结果为true,否则为false
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
-
-
- //! 取反的使用
- System.out.println(60 > 20); //T
- System.out.println(!(60 > 20)); //F
-
-
- //a^b:逻辑异或的使用
- boolean b = (10 > 1) ^ ( 3 > 5);
- System.out.println("b=" + b);//T
- }
- }
基本赋值运算符 | = |
---|---|
复合赋值运算符 | +=,-=,*=,/=,%=,... |
关于复合赋值运算符这里只讲解+=以及/=因为其他的运算规则一致。
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
-
- int n1 = 10;
- n1 += 4;// n1 = n1 + 4;
- System.out.println(n1); // 14
-
- n2 /= 3;// n2 = n2 / 3;//4
- System.out.println(n2); // 4
- }
- }
n1 += 4其等价于n1 = n1 + 4,而n2 /= 3其等价于n2 = n2 / 3。
赋值运算符的特点:
- byte b = 3;
- b += 2; // 等价 b = (byte)(b + 2);
- b++; // b = (byte)(b+1);
三元运算符也称为三目运算符,其基本语法为:
条件表达式 ?表达式1 :表达式2
运算规则为:若条件表达式为真则执行表达式1,为假则执行表达式2。
举例:
- public class CSDN {
- //编写一个main方法
- public static void main(String[] args) {
- int a = 10;
- int b = 99;
-
- int result = a > b ? a++ : b--;
-
- System.out.println("result=" + result);
- System.out.println("a=" + a);
- System.out.println("b=" + b);
-
- }
- }
a的值为10,b的值为99,即a>b条件表达式为假,返回b--,先返回b的值,然后在进行b-1的操作。注意:表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)。
三目运算符可以转换为if...else语句。
运算符有不同的优先级, 所谓优先级就是表达式运算中的运算顺序。 如下表, 上一行运算符的优先级总优先于下一行。只有单目运算符、 赋值运算符是从右向左运算的,其他都为从左向右的。
. () {} ; , | |
R——>L | ++ -- ~ !(data type) |
L——>R | * / % |
L——>R | + - |
L——>R | << >> >>> 位移 |
L——>R | < > <= >= instanceof |
L——>R | == != |
L——>R | & |
L——>R | ^ |
L——>R | | |
L——>R | && |
L——>R | || |
L——>R | ? : |
R——>L | = *= /= %= |
+= -= <<= >>= | |
>>>= &= ^= |= |
这里只进行几个基本的规范,更加详细的见文档。
被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)。关键字中所有字母都为小写
用于定义数据类型的关键字 | class、interface、enum、byte、short、int、long、float、double、char、boolean、void |
用于定义数据类型值的关键字 | true、false、null |
用于定义流程控制的关键字 | if、else、switch、case、default、while、do、for、break、continue、return |
用于定义访问权限修饰符的关键字 | private、protected、public |
用于定义类、函数、变量修饰符的关键字 | abstract、final、static、synchronized |
用于定义类与类之间关系的关键字 | extends、implements |
用于定义建立实例及引用实例、判断实例的关键字 | new、this、super、instanceof |
用于包的关键字 | package、import |
用于异常处理的关键字 | try、catch、finally、throw、throws |
其他修饰符关键字 | native、strictfp、transient、volatile、assert |
现有 Java 版本尚未使用, 但以后版本可能会作为关键字使用。 自己命名标识符时要避免使用这些保留字: byValue、 cast、 future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、 const。
在编程中,我们需要提高程序的灵活性,需要接收用户输入的数据,就可以使用键盘输入语句来获取。需要一个 扫描器(对象), 就是Scanner
方法:
- import java.util.Scanner; //把Java.util下的Scanner类导入
-
- public class Import {
- //编写main方法
- public static void main(String[] args)
- {
- //演示接受用户的输入
- //步骤
- //Scanner类 表示 简单文本扫描器,在Java.util包
- //1.引入/导入Scanner类所在的包
- //2.创建Scanner对象,new 创建
- // myScanner就是Scanner类的对象
- Scanner myScanner = new Scanner(System.in);
- //3.接收用户输入的信息使用 相关的方法
-
- System.out.println("请输入名字");
- String name = myScanner.next();//当程序执行到next方法时,会等待用户输入~
- System.out.println("名字=" + name);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。