文章目录
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算术运算符
算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多。
public class Test {
public static void main(String[] args) {
// /使用
System.out.println(10 / 4); // 2
System.out.println(10.0 / 4); // 2.5
double d = 10 / 4;
System.out.println(d); // 2.0
// %使用
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没有区别
System.out.println("i=" + i); //11
// 不一样的地方来了
int k = 0;
int kplus = k++;
System.out.println(kplus);
}
}
public class Test {
public static void main(String[] args) {
// 奇怪的sb题目
int i = 1;
// i = i++; //规则使用临时变量: (1) temp=i; (2)i=i+1; (3)i=temp;
i = ++i; //(1)i=i+1; (2)temp=i; (3)i=temp;
System.out.println(i);// 1 2
}
}
Java 中的 i = i++ 问题_善良超锅锅的博客-CSDN博客
关系运算符[比较运算符]
关系运算符的结果都是boolean型,也就是要么是true,要么是false
关系表达式经常用在if结构的条件中或循环结构的条件中
逻辑运算符
用于连接多个条件(多个关系表达式) ,最终的结果也是一个boolean值。
分为两组学习
1)短路与&& 短路或|| 取反!
2)逻辑与& 逻辑或| ^逻辑异或
&&和&使用区别
- &&短路与:如果第一个条件为false, 则第二个条件不会判断,最终结果为false, 效率高
- &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
- 开发中,我们使用的基本是短路与&&,效率高
public class Test {
public static void main(String[] args) {
boolean x = true;
if (x = false) { // = 这里是赋值,条件不成立
System.out.println("!");
}
}
}
赋值运算符
赋值运算符就是将某个运算后的值,赋给指定的变量。
赋值运算符特点
1 运算顺序从右往左 int num=a+b+c;
2 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
int num=20;
int num2=78*34-10;
int num3=a;
3 复合赋值运算符等价于下面的效果
比如: a+=3;等价于a=a+ 3;
4 复合赋值运算符会进行类型转换。
byte b=2;
b+=3; //等价于 b=(byte)(b+3)
b++; //等价于 b=(byte)(b+1)
三元运算符
条件表达式?表达式1:表达式2;
1.如果条件表达式为true,运算后的结果是表达式1;
2.如果条件表达式为false,运算后的结果是表达式2;
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 10;
int c = a > b ? a++ : --b;
System.out.println(c);
}
}
表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)
三元运算符可以转成if–else语句
int res=a>b?a++:--b;
运算符优先级
1 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如表,上一行运算符总优先于下一行。
2 只有 单目运算符、赋值运算符 是从右向左运算的。
标识符的命名规则和规范
标识符概念
- Java 对各种变量、方法和类等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符
int num1 = 90;
标识符的命名规则(必须遵守)
- 由26个英文字母大小写,0-9,_ 或 $ 组成
- 数字不可以开头。
int 3ab = 1;
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
int totalNum = 10; int n = 90;
- 标识符不能包含空格。
int a b = 90;
标识符命名规范[更加专业]
- 包名:多单词组成时所有字母都小写: aaa.bbb.ccc //比如com.hsp.crm
- 类名、接口名:多单词组成时,所有单词的首字母大写: XxxYyyZzz [大驼峰]
比如: TankShotGame - 变量名、方法名:多单词组成时,第一个单词首字母小写, 第二个单词开始每个单词首字母大写: xxxYyyZzz[小驼峰, 驼峰]
比如: tankShotGame - 常量名:所有字母都大写。多单词时每个单词用下划线连接: XXX_YYY_ZZZ
比如:定义一个所得税率TAX_RATE - 后面我们学习到类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档.
关键字与保留字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
Java保留字: 现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字
byValue、cast、 future、 generic、 inner、 operator、outer、rest、var 、goto、const
键盘输入语句
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个扫描器(对象),就是Scanner
步骤
1)导入该类的所在包,java.util.*
2)创建该类对象(声明变量)
3)调用里面的功能
案例演示:
要求:可以从控制台接收用户信息,[姓名,年龄,薪水]。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//1 导入Scanner类
//2 创建Scanner对象
Scanner scanner = new Scanner(System.in);
//3 接受用户输入
System.out.println("请输入名字:");
String name = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
//4 show一下
System.out.println(name + "现在" + age + "岁了!");
}
}
进制
对于整数,有四种表示方式:
- 二进制: 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不区分大小写。
public class Test {
public static void main(String[] args) {
int n1 = 0b1010; //二进制
int n2 = 1010;//十进制
int n3 = 01010;//八进制
int n4 = 0x10101;//十六进制
}
}
位运算符[需要二进制基础]
二进制在运算中的说明
- 二进制是逢2进位的进位制,0、1是基本算符。
- 现代的电子计算机技术全部采用的是进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary) 数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。
原码、反码、补码(重点难点)
网上对原码,反码,补码的解释过于复杂,我这里精简几句话:
对于有符号的而言:
- 二进制的最高位是符号位: 0表示正数,1表示负数
- 正数的原码,反码,补码都一样
- 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
- 负数的补码=它的反码+1,负数的反码=负数的补码- 1
- 0的反码,补码都是0
- java没有无符号数, 换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的.
- 当我们看运算结果的时候,要看他的原码
位运算符
// 先得到2的补码 00000010
// 3的补码 00000011
// 运算结果 2&3 00000010 这个是补码
// 符号位是0,正数 三码合一 so 原码 00000010 = 2
System.out.println(2 & 3);
// -2的原码 10000010
// -2的反码 11111101 符号位不变, 其他位取反
// -2的补码 11111110 反码+1
// ~之后 00000001 这个是补码
// 0是正数 三码合一 =1
System.out.println(~-2);
// 2的原码 0000 0010
// 2的补码 0000 0010 三码合一
// ~之后 1111 1101 这个是补码
// 符号位1是负数
// 先 -1 得到反码 1111 1100
// 再取反 得到原码 1000 0011 = -3
System.out.println(~2);
还有3个位运算符>>
、<<
和 >>>
, 运算规则:
- 算术右移>>: 低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移< <: 符号位不变,低位补0
- 逻辑右移也叫无符号右移运算规则是: 低位溢出,高位补0
- 特别说明: 没有<<<符号
// 1的原码 0000 0001 => 0000 0000 01
System.out.println(1 >> 2); //=0 相当于 /2/2
// 1的原码 0000 0001 => 0000 0100
System.out.println(1 << 2); //=4 相当于 *2*2