day 04
——Less Is More!
代码要精读易懂
数据类型拓展和部分面试题
整数拓展:
二进制 0b
int i=0b10 sout=2
十进制
int i1=10 sout=10
八进制 0
int i2=010 sout=8
十六进制 0x 0~9 A~F
iny i3=0x10 sout=16
注:sout= 为 System.out.println的结果为
浮点数拓展
银行业务怎么表示钱?不能用float表示,用BigDecimaL 表示,他是一个数学工具类
float double 是有限 离散 舍入误差 大约 接近但不等于的
float f=0.1f;//0.1
double d=1.0/10;//0.1
sout(f==d); sout=false
//但是
float d1=235645613421f;
float d2=d1+1;
sout(d1==d2); sout=true
//!因此比较的话用bigdecimal
注:原因要从内存分析
有意思的字符串同原因
String sa=new String(orignal:"hello world");
String sb=new String(orignal:"hello world");
sout(sa==sb); sout=false
String sc="hello world";
String sd="hello world";
sout(sc==sd); sout=true
//要在对象中从内存分析
字符拓展
——所有的字符本质还是数字
char c1='A';
char c2='中';
sout(c1); sout=A
sout((int)c1); sout=65//加int是强制转换
sout(c2); sout=中
sout((int)c2); sout=20013//加int是强制转换
//强制转换的是unicode编码,占2个字节 0~65536,excel使用的限制就是2的16次方,也就是65536
//U0000~UFFFF
char c3='\u0061';
sout(c3); sout=a
转义字符
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符''' | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 十六进制所代表的任意字符 | 十六进制 |
主要是:
\t 制表符
\n 换行
sout("Hello\tWorld"); sout=Hello World (中间有空格)
sout("Hello\nWorld"); sout=Hello
world(换行)
布尔型拓展
——新老手的辨别
boolean flag=true;
if(flag==true){}
if(flag)
//两者一样的,但是从中可以看出你是新老手
类型转换
运算中,不同类型的数据先转化为同一类型,然后进行运算。
类型转换由高到低
double>float>long>int>char,short,byte
int i=128; sout=128
byte b=(byte)i; sout=-128//内存溢出
//强制转换 (类型)+变量名 由高到低
double b=i; sout=128.0
//自动转换 由低到高
/* 注:
1。不能对布尔值进行转换
2.不能把对像类型转换为不相干的类型
3.在把高容量转换到滴容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
*/
/*
例 sout((int)23.7); sout=23
sout((int)-45.89f); sout=-45
===============================================
char c='a';
int d=c+1;
sout(d); sout=a
sout((char)d); sout=98
*/
//操作比较大的数的时候,注意溢出的问题
int money =10_0000_0000;//jdk新特性,数字之间可以用下划线分割,不会输出。sout=1000000000
int years=20;
int total1=money*years;//sout=-1474836480,计算的时候溢出了
long total2=money*years;//默认是int,转换之前已经存在问题了
long total2=money*(long)years;//sout=20000000000,先把一个数转换为long就可以输出
/***
*░░░░░░░░░░░░░░░░░░░░░░░░▄░░
*░░░░░░░░░▐█░░░░░░░░░░░▄▀▒▌░
*░░░░░░░░▐▀▒█░░░░░░░░▄▀▒▒▒▐
*░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐
*░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐
*░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌
*░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒
*░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐
*░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄
*░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒
*▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒
*单身狗就这样默默地看着你,一句话也不说。
*/