java基础学习笔记——day04
1. 类型转换
1.1 含义
- 在java中各个数据类型之间是可以互相转换的,我们将类型转换分为两种,一种称之为 自动转换 , 强制 转换 。
1.2 自动转换
- 类数据型之间可以进行自动转换
- 数值之间在进行四则运算时,数据类型会自动向大类型靠拢
- 通过各类型的储存空间来判断类型的大小
- 顺序: byte->short->int->long>float->double
- boolean类型不能进行转换
byte a = 10;//a是byte类型
int b = a;//将byte类型的a赋值给int类型的b
System.out.println("b="+b);//能正常输出结果 b=10
注意: 将一个float的值赋给double的时候,会出现误差
double a = 3*12+3.3F;
System.out.println("a="+a);
//结果是 a=39.29999923706055
1.3 强制类型转换
- 大类型变量要转化为小类型,就需要强制转换
格式: 小类型 = (小类型)大类型
int num = 10;
byte a =(byte)num;
注意:强制转换有可能造成数据错误,不推荐使用。
int num =129;
byte a = (byte)num;
System.out.println("a="+a);
//输出结果是 a=-127
- 129-> 0000 0000 0000 0000 0000 0000 1000 0001
- -> byte 1个字节 1000 0001
- -> 符号位是1 所以是负数 所有的数据都是补码存储 原码展示
- -> 1000 0001-> (反) 1000 0000 -> 原码 1111 1111 -> -127
2. 常量
2.1什么是常量
- 常量就是程序运行期间其值不能改变的量
2.2 常量的定义方式
- 通过 final 修饰的变量就是常量,也叫做最终变量
final int num = 10 ;//
2.3 常量的命名规则
- 所有的字母均大写,单词之间通过 _(下划线)分割
final int STUDENT_NUM = 10 ;
3. 运算符
3.1 基本概念
-
运算符就是用来进行运算的符号
-
运算符左右的内容称之为操作数,通过运算符旁边操作数的个数判断该运算符是几元(目)运算符
- 一元(目)运算符:运算符左右两边只有一个操作数
- 二元(目)运算符:运算符左右两边有两个操作数
- 三元(目)运算符:运算符左右两边有三个个操作数
-
目前最多只有三元运算符,而且只有一个: ? :
3.2 运算符的分类
- 算数运算符:+ - * / % ++ –
- 关系运算符:> < >= <= != == intstanceOf
- 逻辑运算符: & | ! ^ && ||
- 赋值运算符: =
- 位运算符: & | ^ >> << <<< !
- 条件运算符: ? :
- 拓展运算符: += -= *= /= %= >>= <<= ^= !=
i. 赋值运算符
- = 进行赋值预算,并且是自右向左进行运算,将右侧的值赋给左侧的变量进行存储
int num = 10; //将右侧的10赋给 = 左侧的变量num
ii. 算数运算符
- +号:双目运算符
- 做为正号: +10 +12
- 做为加号: 1+1 5+2
- 做为连接符: “你好”+“中国”
int num = +10;//做为正号
mum = 5+2;//做为加号
System.out.println("你好"+"中国");
- -号:双目运算符
- 做为负号: -10 -12
- 做为减号: 5-2
int num = -10;//这是负号
num = 5-2 ;//这是减号
- / * % :双目运算符
int num = 5/2;//除号
num = 5*2;//乘号
num = num%10;//取余
- ++ --:单目运算符
int num = 10,num1=0,num2=0,num3=0,num4=0;
num1=num++; //运算前num=10,num1=0运算后num=11,num1=10
num2=num1--;//运算前num1=11,num2=0运算后num1=10,num2=11
num3=++num2;//运算前num2=12,num3=0运算后num2=12,num3=12
num4=--num3;//运算前num3=11,num4=0运算后num3=11,num4=11
- 注意事项:
- ++ 运算符 是在原来变量的基础上自增
- – 运算符 是在原来变量的基础上自减1
- ++ – 在前面,先加一,再运算
- ++ – 在后面,先运算,再加一
- 如不理解,请参考上面的例子
iii.关系运算符
-
< >= <= != == intstanceOf(现在不学)
-
注意事项
- 关系运算符的结果一定是一个boolean值 (true、false)
- !== == 既可以比较基本数据类型,也可以比较引用类型
- < >= <= 只能比较基本数据类型(boolean除外)
boolean flag = 4>10;
System.out.println(flag);//输出结果是: false
System.out.println("abc"=="abc");//输出结果是: true
iv 逻辑运算符
-
& | ! ^ && ||
- &和&& 左右两边的操作数都为true,其结果才为true。
- |和||左右两边的操作数有一个为true,其结果就为true。
- ^ 左右两边的操作数相同为false,不同为true。
- !取反,true->false false->true
-
注意事项
- 逻辑运算符左右变量的操作数有且只能是boolean类型的值
- 。当 & ^ | 左右两边的操作数不是boolean类型,是数值型时要注意,此时& | ^ 不是逻辑运算符而是 位运算符。
- && || 有短路功能,所以多数情况都是用 && || 而不是& |
- &&当左边第一个操作数为false的情况下不会对第二个操作数进行运算,因为结果一定 为false。
- ||当左边第一个操作数为true的情况下不会对第二个操作数进行运算,因为结果一定为 true
System.out.println("测试逻辑&运算符"); //两别都为treu才为true
System.out.println(true&true);
System.out.println(true&false);
System.out.println(false&true);
System.out.println(false&false);
//结果是 true false false false
System.out.println("测试逻辑&&运算符"); //两别都为treu才为true
System.out.println(true&&true);
System.out.println(true&&false);
System.out.println(false&&true);
System.out.println(false&&false);
//结果是 true false false false
System.out.println("测试逻辑|运算符");
System.out.println(true|true);//只要有一边是ture就为true
System.out.println(true|false);
System.out.println(false|true);
System.out.println(false|false);
//结果是 true true true false
System.out.println("测试逻辑||运算符");
System.out.println(true||true);//**只要有一边是ture就为true**
System.out.println(true||false);
System.out.println(false||true);
System.out.println(false||false);
//结果是 true true true false
System.out.println("测试逻辑!运算符");
System.out.println(!true); //取反
System.out.println(!false);
//结果是 false true
System.out.println("测试逻辑^运算符");
System.out.println(true^true); //相同为fasle 不同为true
System.out.println(true^false);
System.out.println(false^true);
System.out.println(false^false);
//结果是 false true true false
v. 条件运算符
- ? : 这是唯一一个三目运算符
**语法规则:**表达式1 ? 表达式2 **:**表达式3
含义:
-
如果表达式1的值为true,则结果为表达式2的值
-
如果表达式1的值为true,则结果为表达式2的值
String str = 10>1?"1表达式1正确":"表达式2正确";
//结果是: 表达式1正确
int num =10>20?10:20;\
//结果是: 20
vi. 拓展运算符
-
*+= -= = /= %= >>= <<= ^= !=
-
其实本质上就是算数运算符和位运算符+赋值运算符的一个结合体。
- num+=10;就是 num=num+10;
- num/=10;就是 num=num/10;
- 以此类推……
int num = 10;
num+=10;//其实就是num=num+10;
扩展运算符的优缺点分析:
-
优点
- 提高了编写的速度
- 提高程序了编译的速度
- 自动进行类型的强制转换(但有风险)
-
缺点
- 不利于阅读
- 自动强制转换可能会让最后的计算结果有误
vii. 位运算符
未完待续……