数据类型面试题拓展
public class Demo02 {
public static void main(String[] args) {
//整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x
int i=10;
int i1=010;//八进制0
int i2=0x10;//十六进制0x 0-9 A-F 16
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println("===============================");
//===============================================================
//浮点数拓展 银行钱怎么表示
//BigDecimal 数学工具类
//===============================================================
//float 有限的 离散的 都会出现舍入误差 大约 接近但不等于
//double
//最好完全避免使用浮点数进行比较
float f=0.1f; //0.1
double d=1.0/10;//0.1
System.out.println(f);
System.out.println(d);
System.out.println(f==d);//结果为false f=0.1 d =0.1
float d1=233333333333232323f;
float d2=d1+1;
System.out.println(d1==d2);//结果为true
System.out.println("===============================");
//===============================================================
//字符拓展
//===============================================================
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int )c1);//强制转换为int类型
System.out.println(c2);
System.out.println((int)c2);//强制转换为int类型
//所有的字符本质还是数学
//编码 Unicode 表(97=a 63=A) 2字节 范围为65536 Excel表的范围为2的16次方=65536
//U0000 UFFFF
char cs='u0061'; //Unicode表的写法
System.out.println(cs); //输出a
//转义字符
//t 制表符
//n 换行
//.......
System.out.println("hello n world");
System.out.println("===============================");
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
//对象 从内存分析
//布尔值扩展
boolean flag=true;
if(flag==true){} //if判断 flag是否等于true
if(flag){} //与上面的表达的意思是一样的
// Less is More ! 代码要精简易读
}
}
类型转换
- 由于java是强类型语言,所以要进行有些运算的时候,需要用到类型装换
- 低------------------------------------------------------------------------------>高
- byte–>short–>char–>int–>long–>float–>double
- 运算中,不同类型的数据先转化为同一类型,然后进行运算
- 强制类型转换
- 自动类型转换
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 在把高容量转换到低容量的时候,强制转换
4. 转换的时候可能存在内存溢出,或者精度问题!
public class Demo03 {
public static void main(String[] args) {
int i=128;
byte b=(byte) i; //内存溢出
//强制转换 (类型)变量名 高--->低
//自动转换 低--->高
System.out.println(i);//128
System.out.println(b);//-128
System.out.println("==================");
System.out.println((int)23.7);//23
System.out.println((int)-45.97f);//-45
System.out.println("=============================");
char c='a';
int d=c+1;//98
System.out.println(d);
System.out.println((char)d);
System.out.println("=============================");
//操作比较大的数的时候,注意溢出问题
//Jdk7新特性,数字之间可以用下划线分割
int money=10_0000_0000;
int years=20;
int total=money*years;//-1474836480,计算的时候溢出了
long total2=money*years;//-1474836480,默认是int,转换之前已经存在问题
long total3=money*((long)years);//先把一个数转换为Long
System.out.println(total3);
}
}