文章目录
Java学习
第4章 运算符
4.1 运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
(1)算术运算符
(2)赋值运算符
(3) 关系运算符 [比较运算符]
(4) 逻辑运算符
(5)位运算符 [需要二进制基础]
(6) 三元运算符
4.2 算术运算符
4.2.1 介绍
算术运算符是对数值类型的变量进行运算的。
4.2.2 算数运算符一览
运算符 | 运算 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +7 | 7 |
- | 负号 | b=11,-b | -11 |
+ | 加 | 9+9 | 18 |
- | 减 | 10-8 | 2 |
* | 乘 | 7*8 | 56 |
/ | 除 | 9/9 | 1 |
% | 取模在 (% 的本质 看一个公式 a % b = a - a / b * b) | 11%9 | 2 |
++ | 自增==(前,++i,先自增后赋值)/(后,i++,先赋值后自增)== | 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 |
+ | 字符串相加 | “hsp” + “edu” | hspedu |
4.2.3 举例说明
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
//特别说明,当i++,++i独立使用时,作用是一样的,都等价于i+1
4.3 关系运算符
4.3.1 介绍
(1)关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
(2) 关系表达式 经常用在 if 结构的条件中或循环结构的条件中
4.3.2 关系运算符一览
运算符 | 运算 范例 结果 |
---|---|
== | 相等于 8==7 false |
!= | 不等于 8!=7 true |
< | 小于 8<7 false |
> | 大于 8>7 true |
<= | 小于等于 8<=7 false |
>= | 大于等于 8>=7 true |
instanceof | 检查是否是类的对象 “hsp” instanceof String true |
4.4 逻辑运算符
4.4.1 介绍
用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。
4.4.2 逻辑运算符一览
分为两组学习
(1)短路与 && , 短路或 ||,取反 !
(2)逻辑与 &,逻辑或 |,逻辑异或 ^
(3)逻辑运算规则
4.4.3 &与&&、|与|| 的区别
-
对于==短路与&&和短路或||==而言,如果第一个条件为 false ,后面的条件不再判断 ,效率高。
-
对于==逻辑与&和逻辑或|==而言,如果第一个条件为 false ,后面的条件仍然会判断。,效率低。
-
开发中, 我们使用的基本是使用短路与&&和短路或||, 效率高。
4.5 赋值运算符
(1)基本赋值运算符 = ;int a = 10;
(2)复合赋值运算符 += ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,
a += b; [等价 a = a + b; ] a -= b; [等价 a = a - b; ]
4.6 三元运算符
(1)条件表达式 ? 表达式 1: 表达式 2;
(2)运算规则: 如果条件表达式为 true,运算后的结果是表达式 1;
如果条件表达式为 false,运算后的结果是表达式 2;
(3)表达式 1 和表达式 2 要为可以赋给接收变量的类型
(4)(或可以自动转换/或者强制转换)
int a = 3;
int b = 8;
int c = a > b ? (int)1.1 : (int)3.4;//可以的
double d = a > b ? a : b + 3;//可以的,满足 int -> double
- 运算符优先级:单目运算符>算数运算符>关系运算符>逻辑运算符>三元运算符>赋值运算符
4.7 标识符的命名规则和规范
4.7.1 标识符概念
- Java对各种变量、方法和类等命名时使用的字符序列称为标识符
- 2.凡是自己可以起名字的地方都叫标识符int num1 =90;
4.7.2 标识符命名规则(重要)
(1)由26个英文字母大小写,0-9,下划线_或$组成
(2)数字不可以开头。int 3ab=1://错误
(3)不可以使用关键字和保留字,但能包含关键字和保留字。
(4)Java中严格区分大小写,长度无限制。int totalNum =10; int n=90;
(5)标识符不能包含空格。int a b=90; //错误
4.7.3 标识符命名规范
(1)包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
(2)类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰] 比如: TankShotGame
(3)变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小驼峰, 简称 驼峰 法] 比如: tankShotGame
(4) 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如 :定义一个所得税率 TAX_RATE
4.8 关键字的定义和特点 (了解)
-
定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)。
-
特点:关键字中所有字母都为小写。
-
保留字:
-
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留
字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const 。
4.9 键盘输入语句
4.9.1 步骤
(1)导入该类的所在包, java.util.*
(2)创建该类对象(声明变量)
(3)调用里面的功能
4.9.2 案例演示
//从键盘输入一个用户信息
import java.util.Scanner;//表示把 java.util 下的 Scanner 类导入
public class Input { //编写一个 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("请输入名字");
//当程序执行到 next 方法时,会等待用户输入~~~
String name = myScanner.next();
//接收用户输入字符串
System.out.println("请输入年龄");
int age = myScanner.nextInt();
//接收用户输入
int System.out.println("请输入薪水");
double sal = myScanner.nextDouble();
//接收用户输入 double
System.out.println("人的信息如下:");
System.out.println("名字=" + name + " 年龄=" + age + " 薪水=" + sal);
}
}
4.10 进制
4.10.1 进制介绍
- 对于整数,有四种表示方式:
-
二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
-
十进制:0-9 ,满 10 进 1。
-
八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
-
十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写
4.10.2 进制转换
(1)二、八和十六进制转为十进制
- 从最低位(最右边)开始,将每个位上的数提出来,乘以2的(位数-1)次方,然后求和。
例题:0b1011=1 * 2的(1-1)次方 + 1 * 2的(2-1)次方 + 0 * 2的(3-1)次方 + 1 * 2的(4-1)次方。= 1 + 2 + 0 + 8 = 11
- 从最低位(最右边)开始,将每个位上的数提出来,乘以8的(位数-1)次方,然后求和。
例题:0234=4 * 8^0 + 3 * 8^1 + 2 * 8^2 = 4 + 24 + 128 =156
- 从最低位(最右边)开始,将每个位上的数提出来,乘以16的(位数-1)次方,然后求和。
例题:0x23A = 10 * 16^0 + 3 * 16^1 + 2 * 16^2 = 570
(2)十进制转为二、八、十六进制
-
将该数不断除以 2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 34 转成二进制 => 0B00100010
-
将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 131 转成八进制 => 0203
- 将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 237 转成十六进制 => 0xED
(3)二进制转为八、十六进制
- 从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 ob11010101 转成八进制
ob11/010/101 =ob11(3)010(2)101(5) => 0325
- 从低位开始,将二进制数每四位一组,转成对应的16进制数即可。
案例:请将 ob11010101 转成十六进制
ob/1101/0101 = ob1101(D)0101(5) = 0xD5
(4)八、十六进制转为二进制
- 将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。
案例:请将 0237 转成二进制
02(010)3(011)7(111) = 0b10011111
-
将16进制数每 1 位,转成对应的一个 4 位的二进制数即可。
案例:请将 0x23B 转成二进制
0x2(0010)3(0011)B(1011) = 0b001000111011
4.11 原码、反码和补码(重难点)
对有符号数而言:
(1)二进制的最高位是符号位:0表示正数,1表示负数。
(2)正数的原码,反码,补码都一样(三码合一)。
(3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
(4)负数的补码=它的反码+1,负数的反码=负数的补码-1。
(5)0的反码,补码都是0
(6)java没有无符号数,换言之,java中的数都是有符号的
(7)在计算机运算的时候,都是以补码的方式来运算的。
(8)当我们看运算结果的时候,要看他的原码(重点)。4.12 位运算符
java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>) ,它们的运算规则为:
-
按位与& : 两位全为1,结果为1,否则为0
-
按位或| : 两位有一个为1,结果为1,否则为0
-
按位异或^ : 两位一个为0,一个为1,结果为1,否则为0
-
按位取反~ : 0->1,1->0
-
算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
-
算术左移 <<: 符号位不变,低位补 0
-
逻辑右移>>>也叫无符号右移,运算规则是: 低位溢出,高位补 0
-
特别说明:没有 <<< 符号