运算符
运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
分类
- 算数运算符
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
算数运算符
算术运算符是对数值类型的变量进行运算的。在Java程序中使用的非常多。
运算符 | 运算 | 例 | 结果 |
---|---|---|---|
+ | 正号 | +7 | 7 |
- | 负号 | -7 | -7 |
+ | 加 | b = 11;-b | -11 |
- | 减 | 1+\1 | 2 |
* | 乘 | 1*6 | 6 |
/ | 除 | 6/2 | 3 |
% | 取余 | 12%5 | 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 |
+ | 字符串相加 | “abc”+“def” | “abcdef” |
public class ArithmeticOperator {
public static void main(String[] args) {
System.out.println(10 / 4); //从数学来看是 2.5, java 中是 2
System.out.println(10.0 / 4); //java 中是 2.5
double d = 10 / 4;//java 中 10 / 4 = 2, 2=>2.0
System.out.println(d);// 是 2.0
// % 的本质 看一个公式!!!! a % b = a - a / b * b
// -10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
// 10 % -3 = 10 - 10 / (-3) * (-3) = 10 - 9 = 1
// -10 % -3 = (-10) - (-10) / (-3) * (-3) = -10 + 9 = -1
System.out.println(10 % 3); //1
System.out.println(-10 % 3); // -1
System.out.println(10 % -3); //1
System.out.println(-10 % -3);//-1
int i = 10;
i++;//自增 等价于 i = i + 1; => i = 11
++i;//自增 等价于 i = i + 1; => i = 12
System.out.println("i=" + i);//12
int j = 8;
//int k = ++j; //等价 j=j+1;k=j;
int k = j++; // 等价 k =j;j=j+1;
System.out.println("k=" + k + "j=" + j);//8 9
}
}
细节说明
- 对于除号
/
,它的整数除和小数除有区别:整数之间做除法时,只保留整数部分而舍弃小数部分。 - 当一个数取模时,可以等价
a % b = a - a / b * b
,这样我们就可以看到取模的一个本质。 - 当自增当做一个独立表达式时,无论++i,还是i++都是一样的。
- 当自增做一个表示时使用j = ++i 等价 j = i + 1,i = i+1;
- 当自增做一个表示时使用j = i++ 等价 j = i, i = i+1;
练习
- 假如还有59天放假,问合xx多少个星期零xx天
- 定义一个变量保存华氏摄氏度,华氏温度转换摄氏温度的公式为:5/9*(华氏摄氏度-100),请求出对应的摄氏温度。(234.5)
public class ArithmeticOperatorExercise{
public static void main(String[] args){
int days = 59;
int weeks = days / 7;
int leftDays = days % 7;
System.out.println(days + "天 合" + weeks + "星期零" + leftDays + "天");
double huaShi = 234.5;
double sheShi = 5.0 / 9 * (huaShi - 100);
System.out.println("华氏温度" + huaShi + " 对应的摄氏温度=" + sheShi);
}
}
关系运算符(比较运算符)
- 关系运算符的结果都是boolean类型,不是true就是false
- 关系表达式通常用在条件结构或循环结构中。
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 8 == 7 | false |
!= | 不等于 | 8 != 7 | true |
< | 小于 | 8 < 7 | false |
> | 大于 | 8 > 7 | true |
<= | 小于等于 | 8<=7 | false |
>= | 大于等于 | 8>=7 | true |
instanceof | 检查是否为类对象 其实是检查类是否有继承关系 | “hsp” instanceof String | true |
public class ArithmeticOperatorExercise{
public static void main(String[] args){
int a = 9;
int b = 8;
System.out.println(a > b); //true
System.out.println(a >= b); //true
System.out.println(a <= b); //false
System.out.println(a < b);//false
System.out.println(a == b); //false
System.out.println(a != b); //true
boolean flag = a > b; //true
System.out.println("flag=" + flag);
}
}
细节说明
- 关系运算符的结果是boolean型,结果不是true就是false。
- 关系运算符组成的表达式,我们叫关系表达式。
- 比较运算符是双等于"==" 区别运算符号"="
逻辑运算符
用于连接多个条件(多个关系表达式)。
-
短路与 && , 短路或 ||,取反 !
-
逻辑与 &,逻辑或 |, 逻辑异或^
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
T | T | T | T | T | T | F | F |
T | F | F | F | T | T | F | T |
F | T | F | F | T | T | T | T |
F | F | F | F | F | F | T | F |
短路与&&
与 逻辑与&
的区别
&&
短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高。&
逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低- 开发中, 我们使用的基本是使用短路与
&&
。
短路或||
与 逻辑或|
的区别
||
短路或:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高。- | 逻辑或:不管第一个条件是否为 false,第二个条件都要判断,效率低
- 开发中, 我们使用的基本是使用短路与
||
。
! 取反
如果条件本身成立,结果为 false,否则为 true 。
^逻辑异或
a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
System.out.println( (4 < 1) ^ (6 > 3) ); // true
赋值运算符
赋值运算符就是将某个运算后的值,赋给指定的变量。
分类
- 基本赋值运算符
=
int a = 10; - 复合赋值运算符
+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理
a += b; (等价 a = a + b; )
a -= b; (等价 a = a - b; )
特点
- 运算顺序从右往左 int num = a + b + c;
- 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
int num = 20; int num2= 78 * 34 - 10; int num3 = a; - 复合赋值运算符等价于下面的效果
a+=3;等价于 a=a+3; 其他类推 - 复合赋值运算符会进行类型转换
byte b = 2; b+=3; b++;
//复合赋值运算符会进行类型转换
byte b = 3; b += 2;
// 等价
b = (byte)(b + 2);
b++; // b = (byte)(b+1);
三目运算符
条件表达式 ? 表达式 1: 表达式 2;
运算规则
-
如果条件表达式为 true,运算后的结果是表达式 1;
-
如果条件表达式为 false,运算后的结果是表达式 2;
说明:这部分的例题因为博主有基础,此处就略过了。(OS:太多了,不想写了。)
运算符优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。
只有单目运算符、赋值运算符是从右向左运算的。
表格
. () {} ; , | |
---|---|
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对各种变量、方法和类等命名时使用的字符序列称为标识符。
理解:凡是可以自己起名字的地方都叫 标识符。
规则(必须遵守)
- 26个字母的大小写,0-9, _或$组成。
- 不可以使用数字开头。
- 不可以使用关键字和保留字,但是能包含其。
- Java中严格区分大小写,长度无限制。
- 标识符不能包含空格。
规范(必须注意)
- 包名:多单词组成时所有单词全部小写。
- 类名、接口名、使用多单词组成时,所有单词的首字母大写。XxxYyyZzz(大驼峰命名规范)
- 变量名,方法名:多单词组成时,第一个单词小写,其他单词首字母大写。(小驼峰)
- 常量名:所有的单词字母都大写。多个单词组成时中间加入下划线。
- 这些规范需要遵守,所有人使用一个规范可以简单明了的进行呢开发。
关键字
被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 - 用于异常处理的关键字
try catch finally throw throws - 用于包的关键字
package import - 其他修饰符关键字
native strictfp transient volatile assert
键盘输入语句
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是Scanner
使用步骤
- 导入该类所在包。
import java.util.Scanner;
- 创建该类对象
- 调用里面的功能
使用样例。
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入姓名");
String name = sc.next();
System.out.println("请输入年龄");
int age = sc.nextInt();
System.out.println("请输入薪资");
double salary = sc.nextDouble();
System.out.println("用户输入的名字是:" + name);
System.out.println("用户输入的年龄是:" + age);
System.out.println("用户输入的薪资是:" + salary);
}
}
进制转换
这部分内容是基本功建议自行学习。