二、整型与浮点型细节:
1、组成
整型变量是由符号位和数位两部分组成
浮点变量是由符号位、指数尾、尾数位组成
整型和浮点型变量的首位都是符号位,用来表示数据的正负
2、整型浮点型变量的长度和取值范围是固定的(事实上同一语言的基本数据类型的长度都是固定的)
3、long类型:对于java,默认的整型变量类型为int,即使定义时使用long类型:
long l1 = 100;
long l 2 = 4294967296;
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
类型 int 的文字 4294967296 超出了范围
想要给long类型的变量赋值,则需要在赋值时在数字后加上L或小写“l”(如果赋值比较小,可以直接赋值给long类型的变量,但变量类型会自动变成int类型,然后在需要的时候变回long类型。(类型转换后边会提到)
long l = 4294967296L;
4、int类型数据的容量有±21亿,足以应付绝大多数情况。
5、bit与byte,bit(比特)是最小存储单位,单位是“位”;byte(字节)是基本存储单位,单位是“字节/字”
6、float类型:对于java,默认的浮点型变量类型为double,即使定义时使用float类型:这点与long类型同理;不同的是float类型后加的是F或者f
7、浮点数常量有两种表现形式:十进制型和科学计数法型
long l = 4294967296L; //long在赋值大数据(超过21亿)时需要在数字后加L
float f = 4294.96F; //float同理
System.out.printf("\n十进制数%3.3f。\n科学计数法数%1.3e。",f,f);
十进制数4294.960。
科学计数法数4.295e+03。
8、8..1/3与2.7
System.out.println(2.7+" "+8.1/3);
2.7 2.6999999999999997
在计算机中8.1/3并不等于2.7,原因是因为计算机用的是二进制数,二进制数十进制转换过程中会出现一定的误差(因为不能无限保留位数)这个误差并不会很大,但也会导致一些比较严重的问题,例如两个本应相等的数无法相等。
double d1 = 2.7,d2 = 8.1/3;
if(d1 == d2) {
System.out.println("两数相等");
上述条件语句不会输出。
解决方法:不直接看两数是否相等,而是看两数差的绝对值是否在一个极小的范围内。
if(Math.abs(d1 - d2) < 0.00001){ //取绝对值的方法
System.out.println("两数可能不相等,但误差小于0.00001了");
}
9、二八十六进制:
二进制:0b+二进制数
八进制:0+八进制数
十六进制:0x(0X)+十六进制数(ABCDEF,分别表示10~16)
三、字符类型
1、字符类型可以存储字符常量和字符常量对应的ASCII码
如果存储字符常量,则需要用 ‘ ’ 括起来;
2、java的字符类型变量允许存储转义字符。
3、字符类型也允许存储汉字等多国语言,只要该字符可以在Unicode码上。
4、打印(输出):既可以输出字符本身,也可以输出字符对应的Unicode码(强制转换成int类型的)
5、字符类型的变量也可以进行运算。
public static void main(String[] arg) {
//字符类型与布尔类型
char c1 = 'a'; //可以存储字母
char c2 = '冉'; //可以存储汉字
char c3 = '\n'; //可以存储转义字符
char c4 = 97; //可以存储字符对应的ASCII值
System.out.println(c1+""+c2+""+c3+""+c4);
System.out.println((int)c1+"\n"+(int)c2+"\n"+(int)c3+"\n"+(int)c4);
//输出对应的Unicode码值
System.out.println(c1+c2);
System.out.println(c1+c3);
}
a冉
a
97
20873
10
97
20970
107
6、字符的存取:
存储:‘a’==》码值97==》二进制码==》存储
读取:读取==》二进制码==》码值97==》‘a’
四、字符编码表:
大致的时间和演进顺序
ASCII码最早,由于成型时间早加之是美国人编写的(字母的基本单位少),所以容量小;后来各国陆陆续续推出了自己的编码表:中国推出了gb2312(简字体为主,兼有日语平假文等),以及后续的gbk(兼有繁体与简体、日语、韩语等);中国台湾推出了繁体字为主的BIG-5;日本推出了jls。由于各个编码方式的码并不兼容,所以在此基础上推出整合的ANSI码在不同的国家地区编码也不同,跨国交流时依然有很大挑战。因此在此基础上,统一了全部编码的Unicode码实现了真正的大一统,但由于体系太过庞大,每一个码的大小可能长达三四个字节,因此由Unicode码革新而来的UTF-8编码受到了人们的欢迎。UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式。
具体可以看:
字符编码类型
五、布尔类型
布尔类型(bool)就是用于判断真假的数据类型,Python中只有两种布尔类型:True与False。
长度只有一个字节
一般用于逻辑运算;用于控制程序的进行。
java语言中无法用零和非零来代指true和false。
boolean flag = false;
if(flag) { //if括号内为真则执行if后的语句,否则跳过该语句,执行else后的语句,若无则跳过
System.out.println("考试已通过");
}
else {
System.out.println("考试未通过");
}
考试未通过
六、引用数据类型:
引用数据类型一共有三大类:
接口cinterface、类class、数组([])
七、java API
java application programming interface(java应用程序接口)简单来说,就是一个列表,一个包含java当前版本java类库中所有类、接口、方法等的大列表,帮助编程人员更好的使用java的类库进行编码。。
总结:今天学习了java数据类型的细节,对于java是强类型语言这句话有较深感触。明天学习强制类型转换和自动类型转换,对这句话的感触或许更深。