day02
1.基本数据类型的封装类
2.基本数据类型转换
-
自动类型转换
容量小的数据类型自动转换成容量大的数据类型。
例如:byte bt = 127 ;=>Java机制默认为int类型,所以这里涉及将int 127 转换成 byte 127 (127数值在byte允许的范围内所以会被自动转换)
转换规则:byte ->short -> int -> long -> float -> double
多类型混合运算时,系统会将所有数据转换成容量最大的类型,然后在进行计算。
-
强制类型转换
将容量大的数据类型前置转换成容量小的数据类型。使用时要加上强制类型转换符【()】。可能造成精度丢失或者溢出。
3.字符串
-
String是引用数据类型
-
null可以赋值给任何引用数据类型
【引用数据类型】:在栈内存中因为空间或格式不允许,又要进行数据存储。此时就将变量池中的地址存入到栈内存中。
例如:类、接口、数组
-
编译时期 相同的字符串常量只会在常量池中创建一份;
-
字符串拼接,不要用‘+’号拼接,应该使用StringBuffer或者StringBuild进行拼接,使用的好处,在原有的字符串中进行拼接,不会出现内存溢出,使用’+'拼接数据,会一直开辟新的空间。
String i = "10"; for(int i = 0; i<=100 ; i++){ i+="l"; }
上述方式使用字符拼接,将会重新开辟101个内存空间。
4.运算符
- 算术运算符
运算符 | 运算 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +5 | 5 |
- | 负号 | -1 | -1 |
+ | 加 | 1+1 | 2 |
- | 减 | 3-2 | 1 |
* | 乘 | 5*6 | 30 |
/ | 除 | 5/5 | 1 |
% | 取余、取模 | 10%3 | 1 |
++i | 自增(前):先运算 后取值 | a=1;b=++a; | a=2;b=2; |
i++ | 自增(后):先取值 后运算 | a=1;b=a++; | a=2;b=1; |
–i | 同上 | ||
i– | 同上 | ||
+ | 字符串相加 | “abc”+“de” | “abcde” |
- 赋值运算符
运算符 | 含义 |
---|---|
= | 把右边的值赋值给左边。 |
+= | i+=1;等价于 i = i + 1; |
-= | 同上 |
*= | 同上 |
/= | 同上 |
short s1 = 1;
s1 = (short) (s1 + 1);
//这两个表达式完全相同 因为+=自带强制类型转换
s1 += 1;
- 比较运算符
都是返回boolean值
运算符 | 运算结果 | 示例 |
---|---|---|
== | 判断是否相等 | 4 == 3 |
!= | 判断是否不等 | 4 ! = 3 |
< | 判断是否小于 | |
> | 判断是否大于 | |
<= | 判断是否小于等于 | |
>= | 判断是否大于等于 |
- 逻辑运算符
用于连接布尔表达式。
运算符 | 含义 | 解释 |
---|---|---|
& | 逻辑与 | 一个假,结果为假。全部为真,结果才是真。会把表达式全部都计算完。 |
| | 逻辑或 | 一个真,结果为真。全部为假,结果才是假。会把表达式全部都计算完。 |
! | 逻辑非 | 原本是真,变为假,反之亦然 |
&& | 短路与 | 一个假,结果为假。全部为真,结果才是真。只要判断出结果是假,就不会计算后面的表达式。 |
|| | 短路或 | 一个真,结果为真。全部为假,结果才是假。只要判断出结果是真,就不会计算后面的表达式。 |
^ | 逻辑异或 | 两个不同,那就是为真;否则为假 |
a | b | a&b | a|b | !a | a^b | a&&b | a||b |
---|---|---|---|---|---|---|---|
true | true | true | true | false | false | true | true |
true | false | false | true | false | true | false | true |
false | true | false | true | true | true | false | true |
false | false | false | false | true | false | false | false |
-
三元运算符
(布尔表达式)?表达式1:表达式2;
表达式1和表达式2返回值必须是同类型。
解释:布尔表达式中,若为真则返回表达式1,否则返回表达式2
-
位运算(扩展)
位运算是直接对二进制进行运算。
运算符 运算 示例 << 左移 3<<2 =>结果为12(3【10进制】= 11【二进制】 1100【二进制左移两位(左移后补零)】=>12) >> 右移 使用补码。将这个数字的补码最右边的n位剔除,左边用符号位数字补上。 >>> 无符号右移 被移位的二进制数,无论符号位是0还是1,空缺位都用0补上。 & 按位与 二进制位的&运算,只有1&1时,结果1;否则为0。 | 按位或 二进制位的|运算,只有0|0时,结果0;否则为1。 ^ 按位异或 二进制位的运算;00=0;11=0;10=1;0^1=1; ~ 取反 按照补码进行按位取反 计算:
- 正数:原码、反码、补码 一样
- 负数
- 原码:
- 反码:符号位不变,其他位按位取反
- 补码:反码+00000001
5.程序流程控制
-
顺序
程序都是从上到下,从里到外的顺序执行
-
分支
使用if–else if – else 的结构执行分支,其中else if 可以不存在或者多个。if和else:最多允许一个。其中else不允许单独出现,必须与if搭配使用,但是if出现了允许不出现else
//方案一 if(a>b){ System.out.println("a"); }else if(b>c){ System.out.println("b"); }else{ System.out.println("c"); } //方案二 if(b>c){ System.out.println("b"); }else{ System.out.println("c"); } //方案三 if(b>c){ System.out.println("b"); } //错误案例: else{ System.out.println("c"); }
【拓展】
-
基本数据类型直接在栈内存中存储的是值(常量值)
对其进行比较时,直接比较其值