Java基础04:数据类型扩展及面试题讲解
整数拓展:
进制:
-
二进制:0b开头
十进制 1 2 3 4 5 6 7 8 9 10 11 12 二进制 01 10 11 100 101 110 111 1000 1001 1010 1011 1100 -
八进制:0开头
十进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 八进制 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 -
十六进制:0x开头
10进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 16进制 1 2 3 4 5 6 7 8 9 A B C D E F 10 11
public class Demo03{
public static void main(String[] args){
int i1 = 0b10; //二进制 0~1
int i2 = 010; //八进制 0~7
int i1 = 10; //十进制 0~9
int i3 = 0x10; //十六进制 0~9 A~F 16
System.out.println(i1); //2
System.out.println(i2); //8
System.out.println(i3); //10
System.out.println(i4); //16
}
}
浮点数拓展
public class Demo03{
public static void main(String[] args){
float f = 0.1f;
double d = 1.0/10;
System.out.println(f); //0.1
Systen.out.println(d); //0.1
System.out.println(f == d); //false
float f1 = 1316532113f;
float f2 = f1 + 1;
System .out.println(f1 == f2); //true
}
}
上面的代码都是正确的,但是运行结果却很让人看不懂。
这是因为float的特性:有限,离散,舍入误差,大约,接近但不等于。
所以最好完全避免使用浮点数进行比较!
字符拓展
public class Demo03{
public static void main(String[] args){
char c1 = 'a';
char c2 = '中';
System.out.println(c1); //a
System.out.println((int)c1); //97 //强制转换
System.out.println(c2); //中
System.out.println((int)c2); //20013 //强制转换
char c3 = '\U0061'; //字符码
System.out.println(c3);//a
}
}
所有的字符本质还是数字
编码 Unicode 表:97=a 65=A 2字节 65536 Excel 2 16 = 65536
例:U0000,UFFFF
转义字符
public class Demo03{
public static void main(String[] args){
System.out.println("Hello,World!");//Hello,World!
System.out.println("Hello \t World!");//Hello World!
System.out.println("Hello \n World!");//Hello 换行
//World!
}
}
今天学了两个转义字符:
-
\t : 制符表
-
\n :换行
### 堆,栈、
public class Demo03{
public static void main(String[] args){
String sa = new String("Hello,World");
String sb = new String("Hello,World");
System.out.println(sa==sb); //false
String sc ="Hello,World";
String sd ="Hello,World";
System.out.println(sc==sd); //true
}
}
new :使数据存到一个新建的空间里
变量 sa和sb 因为使用的new赋的值,所以sa不等于sb。
变量sc和sd没有用方法new,所以他们相等;
布尔值拓展
boolean flag = true;
if(flag == true){} //新手
if(flag){} //老手
Less is More! 代码要精简易读!