用的书:《Java从入门到精通》
day1(3.1-3.3): 【Java】从头开始的Java复健day1
第三章 Java语言基础
3.4 运算符
赋值运算符
= 如果一个表达式中有两个以上的“=”,会从最右方的“=”开始处理
算术运算符
- 加法+
- 减法-
- 乘法*
- 除法/(0不能当除数)
- 取余%
自增自减
- ++a:先+1再使用a --a:先-1再使用
- a++:先使用a再+1 a--:先使用a再-1
比较运算符
结果是布尔型(比较简单 和其他语言也共通 不写了)
逻辑运算符
结果是布尔型(也比较简单 不写了)
- &(&&)与
- ||或
- !非
&和&&的区别
-
短路:在逻辑表达式中从左端的表达式可以推断出整个表达式的值称为短路
换句话说就是 不用判断所有部分对错就可以知道整个式子的最终结果这种情况叫短路 -
&:非短路运算符 即 就算只判断了一部分就可以得出最终结果也会把所有部分都判断完
-
&&:短路运算符 即 只判断了一部分就可以得出最终结果的话就会结束判断
eg:
(false || false) & (!false) 会把前后两部分都进行判断
(false || false) && (!false) 只会判断前一部分
位运算符
位运算是完全针对位方面的操作
整型数据在内存中按照2进制形式表示 如7为 00000000 00000000 00000000 00000111
其中左边最高位是符号位1为负0为正
负数采用补码表示 如-8为 11111111 11111111 11111111 11111000
关于原码反码补码:https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
- 按位与& 每一位上做逻辑与
- 按位或| 每一位上做逻辑或
- 按位取反~ 每一位上做逻辑非
- 按位异或^ 每一位上相同为0 不同为1
- 移位操作:只适用于byte short char int long
- <<左移 整体左移 右边补0
- >>右移 最高位为0右移后左边补0 最高位为1右移后左边补1
- >>>无符号右移 无论最高位01 右移之后都补0
- 移位可以实现*2和/2效果 例如y<<1就是y*2 y>>1就是y/2
y<<n就是y*2的n次方 y>>n就是y/2的n次方
三元运算符
条件式?值1:值2;
条件式为真则取值1 为假则取值2
eg: boolean b = 20<45?true:false; 此时b=true
运算符优先级
括号 > 正负号 > 自增自减和! > 算术运算 > 移位运算 > 比较运算 > 按位运算 > 逻辑运算 > 赋值运算
Java3_4 {
public static void main(String[] args){
int a, b, c;
a = 15;
/*
可以但不建议 最好还是写成
c = a + 4;
b = a + 4;
或者b是跟c有逻辑相连关系写成
b = c;
*/
c = b = a + 4;
System.out.println("c值为:" + c);
System.out.println("b值为:" + b);
float number1 = 45.56f;
int number2 = 152;
System.out.println("和为:" + (number1 + number2));
System.out.println("差为:" + (number1 - number2));
System.out.println("积为:" + (number1 * number2));
System.out.println("商为:" + (number1 / number2));
int m, n = 1, o = 1;
// 此时n++是先使用n原本的值再+1
m = n++;
// 故此时赋于m的值还是+1之前的1
System.out.println(m);
// 此时n已经+1 故输出为已经+1之后的2
System.out.println(n);
// ++o是先+1再使用o
m = ++o;
// 故此时m为已经+1之后的2
System.out.println(m);
boolean flag = 20<45?true:false;
System.out.println(flag);
}
}
3.5 数据类型转换
- 低精度→高精度 不会溢出 总是成功
- 高精度→低精度 信息丢失 可能失败
隐式类型转换
程序自动执行 但是只能低→高
byte < short < int < long < float < double
显式类型转换
可以强制转换高→低 但是可能会信息丢失
格式:(目标类型名)值
当把整数值赋值给byte short int或者long时不可以超出范围 否则必须进行强制转换
public class Java3_5 {
public static void main(String[] args){
System.out.println("隐式类型转换");
int x = 50;
float y = x;
System.out.println(y);
double z = 89.897;
System.out.println(x + z);
System.out.println("显式类型转换");
int a = (int)45.678;
System.out.println(a);
byte b = (byte)129;
System.out.println(b);
}
}
顺便带过的文档注释
/**
* 3_6文档注释
* 这个用在类的声明 成员变量声明 成员方法声明
*/
3.6 3.7 略
3.8 测试
题目写输出里了
public class Java_test3_8 {
// 成员变量只能在类体中声明 并且要加static关键字 只能赋值一次 可以被其他类调用
static int age = 18;
public static void main(String[] args){
System.out.println("1.两数和");
int a = 1, b = 2;
System.out.println("a+b=" + (a + b));
System.out.println("2.声明成员变量age和局部变量name,比较区别并添加注释");
// 局部变量在方法体中声明 可以不在定义时赋值 可以多次赋值 生命周期只在方法被调用时存在
String name = "张三";
System.out.println("3.将所有整型数值全部转换为int,并将转换后的值输出");
long myLong = 1234567890123L;
byte myByte = -128;
short myShort = 32767;
System.out.println("long→int: "+(int)myLong);
System.out.println("byte→int: "+(int)myByte);
System.out.println("short→int: "+(int)myShort);
}
}