数据类型
整数拓展:
进制
int i=0b10 // 二进制 0b
int i0=010 //八进制 0
int i1=10 //十进制
int i2=0x10 //十六进制 0x
浮点拓展:
银行业务用什么表示?有关于钱的问题
//采用BIgDecimal类,(数学工具类)
float //有限 离散 舍入误差 大约 接近但不等于
double //最好完全使用浮点数进行比较
public class Q {
public static void main(String arg[]){
float i1=0.1f;
double i2=1.0/10;
System.out.println(i1==i2);//false
}
}
通过上面的小测试显示结果是false。
public class Q {
public static void main(String arg[]){
float i1=0.1f;
double i2=1.0/10;
System.out.println(i1==i2);//false
float i3=1234549674865341f;
float i4=i3+1;
System.out.println(i3==i4);//ture
}
}
加入另一个小测试结果页同样令人出乎意料,两个明明看似相等的数,在电脑上运行得到的结果确是不相等,而两个明显不相等的数在电脑上运行结果确是相等的。其原因就是float的数据大小有限,且运算带有舍入误差和接近但不等于。
字符拓展:
package Text;
public class Q {
public static void main(String arg[]){
float i1=0.1f;
double i2=1.0/10;
System.out.println(i1==i2);//false
float i3=1234549674865341f;
float i4=i3+1;
System.out.println(i3==i4);//ture
char s1='A';
char s2='加';
System.out.println(s1);
System.out.println((int)s1);//强制转换 输出结果为65
System.out.println(s2);
System.out.println((int)s2);//强制转换 输出结果为21152
}
}
//所以字符的本质还是数字。编码 Unicode表(A=65,a=97) 2 字节 0~2的16次方=65536。
char s3 = '\u0067';
试试看此条代码所输出的是哪个字符。
转义字符
\u 4位十六进制数据所表示的字符,如\u0014
\t 水平制表符
\v 垂直制表符
\r 回车
\n 换行
…
public class Q {
public static void main(String arg[]){
float i1=0.1f;
double i2=1.0/10;
System.out.println(i1==i2);//false
float i3=1234549674865341f;
float i4=i3+1;
System.out.println(i3==i4);//ture
char s1='A';
char s2='加';
System.out.println(s1);
System.out.println((int)s1);//强制转换 输出结果为65
System.out.println(s2);
System.out.println((int)s2);//强制转换 输出结果为21152
char s3 = '\u0067';
System.out.println(s3);
System.out.println("==============================");
String ra = new String("Hello word");
String rb = new String("Hello word");
System.out.println(ra == rb);//false
}
}
这里的ra rb内容明明是同样的,但为什么不相等呢?
String类型new的是一个新的对象,在面向对象的过程中,sa和sb是两个不同的对象,储存地址不同,所以不等。
布尔值扩展
boolean flag = true;
if(flag==ture){} //新手
if(flag){} //老手