title: Java_Day_2学习笔记
data: 2024-07-10
tags: Java
运算符
介绍
运算符是一种特殊的符号,表示数据间的一些操作
- 算术运算符
- 赋值运算符
- 关系运算符【比较运算符】
- 逻辑运算符
- 位运算符【二进制基础】
- 三元运算符
算术运算符
运算符 | 运算 |
---|---|
+ | 正号 |
- | 负号 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
++ | 自增(前)先运算后取值 自增(后)先取值后运算 |
- - | 自减(前)先运算后取值 自减(后)先取值后运算 |
+ | 字符串相加 |
除法(/)
Java在进行除法运算的时候,一定要关注数据的类型,相同的数据,不同的数据类型可能会得出来不同的结果。这一点其实在C++中也存在。下面是一个关于除法运算的一个案例(仅供参考):
// ArithmeticOperator.java
// 创建一个公共的类,切记一个.java文件只能有一个公有库,且名字与文件名一致
public class ArithmeticOperator{
// 创建main函数,至于为什么是这个,笔者现在还不知道,笔者也在学习
public static void main(String[] args){
System.out.println(10 / 4); // 2;因为数据的类型都是int,输出也应该是int
System.out.println(10.0 / 4); // 2.5;由于10.0是double,则在运算的时候,数据结果在运算的过程中转换为了double类型
double d = 10 / 4;
System.out.println(d); // 2.0;在运算过程中右边的数据并没有转变数据类型,所以右边的结果应该是int类型,但是现在要赋值给double类型的变量,所以右边的int类型被转换成了double
}
}
取模(取余,%)
其实取模的运算可以看作一个公式,即 a % b = a - a / b * b
下面是一些案例,仅供参考:
// ArithmeticOperator.java
// 创建一个公共的类,切记一个.java文件只能有一个公有库,且名字与文件名一致
public class ArithmeticOperator{
public static void main(String[] args){
System.out.println(10 % 3); // 1
System.out.println(-10 % 3); // -1
System.out.println(10 % -3); // 1
}
}
其实在上面的案例中我们可以先不看两个数字的符号。
按绝对值,即正数来运算,最后得出来的余数与%前面的数字的符号一致。
自增(++)
自减与自增基本一致,这里笔者就只写自增啦,自减的话希望大家可以举一反三进行程序编写和测试。
// ArithmeticOperator.java
// 创建一个公共的类,切记一个.java文件只能有一个公有库,且名字与文件名一致
public class ArithmeticOperator{
public static void main(String[] args){
int i = 1;
int k = i++;
System.out.println(k); // 1; ++在后面就是先把i拿来用,再给i增加一个数值。
System.out.println(i); // 2
int m = ++i;
System.out.println(i); // 3
System.out.println(m); // 3;++在前面就是先给i增加一个数值,再拿i来用。
}
}
如果是变量单独运算,即不与其它变量进行混合运算时,前后无所谓。
小题两道
int i = 1;
i = i++; //会使用一个临时变量:(1)temp=i;(2)i=i+1;(3)i=temp
i = ? // 1
int i = 1;
i = ++i;//使用一个临时变量(1)i=i+1;(2)temp=i;(3)i=temp
i = ? // 2
编程:定义一个变量来保存华氏温度,华氏温度转换成摄氏温度的公式为: 5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。[123.4]
步骤:分析需求;给出思路;写代码。
关系运算符
- 结果都是布尔型,即只有true和false两种。
运算符 | 运算 |
---|---|
== | 相等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
instanceof | 检查是否是类的对象 |
比较运算符的==不要写成=,=是赋值运算符。
关系运算符理解各个运算符的实际意义即可。
逻辑运算符
- 短路与&&, 短路或||, 取反!
- 逻辑与&, 逻辑或|,逻辑异或^
a | b | a&&b | a||b | a&b | a|b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | true | false | true | false | true |
false | true | false | true | false | true | false | true |
false | false | false | false | false | false | true | false |
对比上表理解每个运算符的运算规则。
其他的运算符可以按照上面的
对于短路与&&, 当第一个条件是false,后面的条件就不会再执行,有and的意思。
public class LogicOperator{
public static void main(String[] args){
int a = 5;
int b = 9;
if(a < 1 && ++b < 50){
System.out.println("Over!");
}
System.out.println(b);
// 9;没有运行++b的操作,可以清晰地知道当判断了a<1为false后,判断语句就不再向后执行,这是短路与&&te'you。
}
}
短路或||和短路与&&类似,当第一个条件是true之后,后面的条件不再判断,有or的意思。
==注意:==短路与和短路或,当第一个条件就可以确定整个式子的值时,就不再看第二个式子;逻辑与和逻辑或,所有条件必须全部都要检查后才能给出整个式子的答案
赋值运算符
- 赋值运算符 =
- 从右向左运算
- 符号左边必须是变量,右边可以是变量、表达式、常量值
- 复合赋值运算符
- +=
- -=
- *=
- ^=
- %=
- 复合运算符在进行运算的时候会进行类型转换
三元运算符
条件表达式?表达式1:表达式2;
- 如果条件表达式是true,则进入表达式1
- 如果条件表达式是false,则进入表达式2
表达式返回的值必须是接收变量所能接收的类型,举例:
int a = 1;
int b = 2;
int c = a > b ? 1.1 : 3.2; //报错,因为接收变量c是int类型,而1.1与3.2默认是double类型,int类型不兼容double类型,所以会报错
int d = a > b ? (int)1.1 : (int) 3.2; //3; 这里使用的是强转,因此右边成为了int类型,可以被左边接收
位运算
进制
满基数就向高位进1
- 二进制(0b):0,1;基数是2
- 十进制:0-9;基数是10
- 八进制(0):0-7;基数是8
- 十六进制(0x):0-F;基数是16
int n1 = 0b1010; //10
int n2 = 1010; //1010
int n3 = 01010; //520
int n4 = 0x1010; //65793
码制
最高位是符号位,且java中没有无符号数,即java中的数都有符号位,0表示正数,1表示负数
- 原码:按照二进制规则来写就行
- 反码:正数时与原码一致;负数时,原码符号不变,其他的按位取反
- 补码:正数时与原码一致;负数时,反码基础上加1
计算机中的运算,都是以补码形式进行运算;但是计算结果看的是原码。
运算
运算符:&、|、^、~
2&3;// 2
//2的补码 00000000 00000000 00000000 000000010
//3的补码 00000000 00000000 00000000 000000011
//按位与 00000000 00000000 00000000 000000010
// 运算后的结果是补码,转换为原码,因为是正数,所以一致。
~2; //-3
//2的补码 00000000 00000000 00000000 000000010
//按位取反11111111 11111111 11111111 11111101 这个时候答案是补码,需要转换为原码才能输出
//答案反码11111111 11111111 11111111 11111100
//答案原码10000000 00000000 00000000 000000011
运算符:>>、<<、>>>
>>算术右移,低位溢出,符号位不变,并用符号位补溢出的高位;本质是/2
<<算术左移,符号位不变,低位补0;本质是*2
>>>逻辑右移,低位溢出,高位补0
没有<<<符号
标识符的规则和规范
规则
规则就是必须遵守的,不应该违背的。
==变量命名:==不能包含关键字(public、int、double等)和保留字(goto等),并且不能用数字开头;变量名只能由数字,字母和符号(_与$)组合来命名
规范
为了看起来更加专业和方便[没有必须要求]
- 包名:多单词组成时所有字母用小写,如aaa.bbb.ccc
- 类名、接口名:多单词组成时,所有单词首字母大写(大驼峰),如LogicOperator
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写(小驼峰),如logicOperator
- 常量名:所有字母均大写,如MAXN
键盘输入
介绍
在进行程序的开发时,我们经常需要与用户进行交互,接收用户的数据输入等。java接收这些信息就需要创建一个扫描器(对象),Scanner
步骤
- 导入该类的所在包
- 创建该类对象(声明变量)
- 调用里面的功能
举例说明:从键盘输入一些信息,让java接收
import java.util.Scanner; // 把java.util下的Scanner类导入程序
// Scanner是简单的文本扫描器
public class input{
// 编写一个main方法
public static void main(String[] args){
// 进行键盘的输入
// new 就是创建一个对象,猜测是构造函数
Scanner scan = new Scanner(System.in); //scan只是一个变量名,可在规定的基础上进行随意的更改
//用户输入并进行接受
System.out.print("请输入数据"); //abcd
String data = scan.next(); //接收用户的输入
System.out.println(data);
int num = Scan.nextInt(); //接收int类型的数据
System.out.paintln(num);
}
}
大家也可以试试其他的输入类型,不过不同的类型接收方式也不同哈。
作业
将String转换为double类型,将char转换为String类型
String s = "123.4";
double d = Double.parseDouble(s);
char c = 'C';
String s1 = c + "";
判断正误
byte b = 19; short s = b + 2; //error;2是int类型,所以右边是int,int不能给short
double d = 1.1F; //可以
int i = 2; char c = i + 1; //error;int类型不能装入char
接收方式也不同哈。
作业
将String转换为double类型,将char转换为String类型
String s = "123.4";
double d = Double.parseDouble(s);
char c = 'C';
String s1 = c + "";
判断正误
byte b = 19; short s = b + 2; //error;2是int类型,所以右边是int,int不能给short
double d = 1.1F; //可以
int i = 2; char c = i + 1; //error;int类型不能装入char