对之前学习的Java基础进行补充
- 数值类型之间的转换
如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。
否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。
否则, 两个操作数都将被转换为 int 类型 - 转换图
有 6 个实心箭头,表示无信息丢失的转换;有 3 个虚箭头, 表示可能有精度
损失的转换
- 位运算符
只说两个常用的位运算符 & (“and”) | (“or”)
&& 和 || 运算符采用 "短路方式” (遇到true就跳出判断语句)
& 和丨运算符不采用“ 短路” 方式(遇到true也继续往后判断)
>> 和 << 运算符将位模式左移或右移
>>> 运算符会用 0 填充高位,这与>>不同,它会用符号位填充高位。不存在<<<运算符 - 补充: += 是右结合运算符(右边优先级高)
- 字符串
字符串不可变,但是也有一个优点就是编译器可以让字符串共享(只有字符串常量才共享!substring操作产生的结果不能共享)
String greeting = "Hello";
if (greeting == "Hello")...
// true
if (greeting.substring(0, 3) == "Hel") . . .
// false
- 共享解释
String s = "123";
String d = "123";
String f = new String("123");
/**
* 老基础注解了,但是我还是想写
* 1:== 判断地址
* 2:equals 方法检测两个字符串是否相等
*/
System.out.println(s == d); // true s与d地址相同
System.out.println(s == f); // false s与f地址不同
System.out.println(d == f); // false s与f地址不同
Java 的设计者认为共享带来的高效率远远胜过于提取、 拼接字符串所带来的低效率
- 码点与代码单元
大多数的常用 Unicode 字符使用一个代
码单元就可以表示,而辅助字符需要一对代码单元表示
// 要想得到实际的长度,即码点数量,可以如下调用
String temp = "你好";
System.out.println(temp.codePointCount(0,temp.length()));
// 2 "你好" 有两个码点
// 获得第1个码点
int index = temp.offsetByCodePoints(0,1);
int codePoint = temp.codePointAt(index);
System.out.println(codePoint);
// 22909
// 遍历“你好”的码点
int[] codePoints = temp.codePoints().toArray();
for (int point : codePoints) {
System.out.println(point);
}
//20320
//22909
今天就先到这!虽然不多 但要坚持 晚安