数据类型扩展及面试
public class Demo{
public static void main(String[] args){
int i=10;
int i2=010; //八进制0 0~7
int i3=0x10; //十六进制0x 0~9 A~F
System.out.println(i); //10
System.out.println(i2); //8
System.out.println(i3); //16
//===========================================
//float 有限 离散 舍入误差 接近但不等于
//double
//最好完全使用浮点数进行比较 存在问题 少用浮点数比较
//浮点数扩展? 银行业务怎么表示?钱
//BigDecimal 数学工具类
//============================================
//字符扩展
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1); //强制转换 97
System.out.println(c2);
System.out.println((int)c2); //强制转换 65536
float f=0.1f; //0.1
double d=1.0/10; //0.1
float d1=121213312123123f;
float d2=d1+1;
System.out.println(f==d); //flase;
System.out.println(d1==d2); //true;
//所有的字符本质还是数字
//编码 Unicode 表:(97=a 65=A) 2个字节 excel 2^16=65536
// U0000 ~ UFFFF
char c3='\u0061';
System.out.println(c3); //a
//转义字符
// \t 制表符
// \n 换行
String sa=new String("hello word!");
String sb=new String("hello word!");
System.out.println(sa==sb); //flase 从内存将,比的是地址!
//布尔值扩展
boolean flag=true;
if(flag==true){} //新手
if(flag){} //老手
//代码要精简已读
//JDK7 新特性,数字之间可以用下划线分割
int money=10_0000_0000;
int years=20;
int total=money*years; //-147489283,计算的时候溢出了
long tota2=money*years; //-147489283 默认是int,转换之前已经存在问题了?
long tota3=years*((long)money); //20000000000 先把一个数转换为Long
long tota4=100_0000_0000L; //代码的规范型,十分重要('l'容易看成'1')!!!
//JDK7的新特性,表达式结果可以是字符串!!!
String name="卡吉尔";
switch(name){
case "卡吉尔":
System.out.println("卡吉尔");break;
case "卡萨丁":
System.out.println("卡萨丁");break;
case "卡吉的":
System.out.println("卡吉的");break;
default:
System.out.println("吉萨大"); //default 最后可以不用break;
}
}
}
注意点:
- 不能对布尔值进行转化
- 不能把对象类型转化为不相关的类型
- 在把高容量转化到低容量的时候,强制转换 强制转换(高—>低:如double->float)自动转换 (低—>高:如 char->int)
- 转换的时候可能存在内容溢出,或者精度问题!