java的8种基本数据类型
2014-04-25 17:14
316 查看
熟悉c++的话,对java的数据类型不会陌生,很相似。java是一种强类型的语言,也就是任何变量都需要声明类型,并且还要考虑数据类型的范围和转化问题。
java一共有8种基本的数据类型;4类整型,2类浮点型,布尔型,和表示unicode编码的字符单元的字符类型char型。和c++不一样!java的类型范围和机器或者平台无关,永远不变。并且java没有无符号数,这点和c++有很大不同,注意区分,java里是直接按照二进制的首位1代表负数,0代表正数来约束范围。
java的四种整型
知道算法即可,一个字节为8位(1byte=8bit),以byte类型为例;负数是1000 0000,正数是0111 1111,其余的依次类推即可。
补充;
万:10的4次,千万是10的7次,百万是10的6次。
亿:代表的是10的八次方。
兆:代表的是10的十二次方。
京:代表的是10的十六次方。
再大的话基本我们大部分人在一般情况下就很少接触了。前面说了,java的整型范围和平台无关,这就保证了软件的移植良好。通常,int是我们常用的,但是当表示较大数,比如大数据的文件数时,就要用long,byte和short主要用在特定场合。并且注意long型的用法,后面加L(大小写不限),否则默认是int。
接下来是2种浮点型类型;float(单精度)和double(双精度),注意!c语言中还有一种long double类型。
java的两类浮点类型
科普下浮点数;因为有小数,这个小数点漂浮不定,就像大海中的漂流物浮起来位置不定一样,我们起了个名字—浮点数,也就是科学计数法,由阶码和尾码组成,也就是有效数字和指数组成, 类似这样 1.0x10^3,这样这个数就是一千,我们只用记录1和3这两个关键数就可以表示,所占空间小,否则是1000,这样你就需要记录1个1和3个0,占据空间大,这种数的小数点不是飘动的,所以不叫浮点数,浮点数节省空间,所以计算机里的小数,和位数比较高的数都用浮点数。不同的是计算机里是2进制浮点。
例如;
3.14=314e-2表示314×10的-2次,这是10进制的记法,用e代表指数。在jdk5.0,可用16进制表示浮点数,用p表示指数,比如;0x1.0p-3,但是尾数采用16进制,指数采用十进制。注意写法;float类型的数字后面带f(F),否则默认是double,double可带可不带。
另外java还有三类表示出错和溢出的浮点数值,但是不是很常用。即为;正无穷大POSITIVE_INFINITY,负无穷大NEGATIVE_INFINITY,不是一个数字NaN(not
a number),不是很常用,作为了解即可。
double resNegative = Double.POSITIVE_INFINITY;
double resPositive = Double.NEGATIVE_INFINITY;
double resNaN = Double.NaN;
System.out.println(resNaN);
System.out.println(resNegative);
System.out.println(resPositive);
结果;
NaN
Infinity
-Infinity
注意;这三个数是常量!并且所有不是数值的值都认为是不同的,所以这样判断一个变量是非数值的方法是错误的,如下;
if(a == Double.NaN){
System.out.println("ok");
}else {
System.out.println("error");
}
结果是error,应该使用Double的isNaN()方法;
if (!Double.isNaN(a)) {
System.out.println("right");
}
结果是right。
下面看个例子,例;计算2-1.2的结果?再计算2-1.1的结果?
结果;
0.8
0.8999999999999999(不是应该是0.9么?)
0.7
为什么结果是这样呢?
因为java的浮点数是不适合禁止舍入的金融计算的,且浮点数采用二进制表示,而二进制(1、0)无法表示十进制的十分之一。用java的BigDecimal类即可,(后续)。
继续走,该char类型了,首先必须弄明白unicode编码表。
char类型表示单个字符,对应着unicode编码的字符单元,使用\u来表示unicode代码单元的编码,范围从\u0000-\uffff。当然还有很多其他的转义字符,他们都可以出现在字符常量或者字符串的引号内,只有\u的转移字符可以出现在引号外。
™
™
为什么会有unicode编码呢?因为这之前,对字符编码美国的ASCII,欧洲的ISO 8859-1,中国的gb118030等等,使用起来标准不统一,麻烦重重,为了解决这个问题,上世纪80年代开始研究,到91年正式发布1.0版本。这些都是废话,谈起来涉及到大量编码的专业知识,和主要矛盾关系不大,嘿嘿。只需要记住,java中非常的不建议使用char类型,最好是用抽象数据类型来表示。(以后再研究)
最后一类;布尔类型boolean。他有两个值;true和false,判断逻辑条件,并且整型和布尔值不能转化。如下不要混淆。
if (x = 0) {
System.out.println("ture");
}
这样的话编译都不能通过,编译错误,因为整型和布尔在java不能转化。但是类似的写法在c++里是可以的,非0为真,0为假。
-----------------------------------------------------------------------------------------------------------------------------------
以上为粗浅的学习和复习,旨在帮助后日若遗忘的时候可以查看和查漏补缺。未完待续……
java一共有8种基本的数据类型;4类整型,2类浮点型,布尔型,和表示unicode编码的字符单元的字符类型char型。和c++不一样!java的类型范围和机器或者平台无关,永远不变。并且java没有无符号数,这点和c++有很大不同,注意区分,java里是直接按照二进制的首位1代表负数,0代表正数来约束范围。
类型 | 所占字节数 | 范围 |
long | 8个 | 大约是10的7次方个兆级别的数字(足够用了,没有必要强记这些大数字,理解了原理和心中明白大致的范围就行了),也就是10的19次,正负差1 |
int | 4个 | 大约刚刚超过21亿(也是正负相差1) |
short | 2个 | -32767到+32768 |
byte | 1个 | -128到+127 |
补充;
万:10的4次,千万是10的7次,百万是10的6次。
亿:代表的是10的八次方。
兆:代表的是10的十二次方。
京:代表的是10的十六次方。
再大的话基本我们大部分人在一般情况下就很少接触了。前面说了,java的整型范围和平台无关,这就保证了软件的移植良好。通常,int是我们常用的,但是当表示较大数,比如大数据的文件数时,就要用long,byte和short主要用在特定场合。并且注意long型的用法,后面加L(大小写不限),否则默认是int。
long longNumber = 9223372036854775806l;
接下来是2种浮点型类型;float(单精度)和double(双精度),注意!c语言中还有一种long double类型。
类型 | 字节数 | 范围 |
double | 8 | 记住有效位数为15位,相当大部分的程序都采用双精度double。 这样肯定不会错。 |
float | 4 | 有效位数为6-7位,用的不多 比如在需要快速处理单精度数据的时候,会用到,其他情况就double就哦了 |
例如;
3.14=314e-2表示314×10的-2次,这是10进制的记法,用e代表指数。在jdk5.0,可用16进制表示浮点数,用p表示指数,比如;0x1.0p-3,但是尾数采用16进制,指数采用十进制。注意写法;float类型的数字后面带f(F),否则默认是double,double可带可不带。
float f = 3.14f; double doubleNumA= 3.14d; double doubleNumB = 3.141592653;所有的浮点数都遵循IEEE 754(电气和电子工程师协会Institute of Electrical and Electronics Engineers)规范。
另外java还有三类表示出错和溢出的浮点数值,但是不是很常用。即为;正无穷大POSITIVE_INFINITY,负无穷大NEGATIVE_INFINITY,不是一个数字NaN(not
a number),不是很常用,作为了解即可。
double resNegative = Double.POSITIVE_INFINITY;
double resPositive = Double.NEGATIVE_INFINITY;
double resNaN = Double.NaN;
System.out.println(resNaN);
System.out.println(resNegative);
System.out.println(resPositive);
结果;
NaN
Infinity
-Infinity
注意;这三个数是常量!并且所有不是数值的值都认为是不同的,所以这样判断一个变量是非数值的方法是错误的,如下;
if(a == Double.NaN){
System.out.println("ok");
}else {
System.out.println("error");
}
结果是error,应该使用Double的isNaN()方法;
if (!Double.isNaN(a)) {
System.out.println("right");
}
结果是right。
下面看个例子,例;计算2-1.2的结果?再计算2-1.1的结果?
System.out.println(2.0 - 1.2); System.out.println(2.0 - 1.1); System.out.println(2.0 - 1.3);
结果;
0.8
0.8999999999999999(不是应该是0.9么?)
0.7
为什么结果是这样呢?
因为java的浮点数是不适合禁止舍入的金融计算的,且浮点数采用二进制表示,而二进制(1、0)无法表示十进制的十分之一。用java的BigDecimal类即可,(后续)。
继续走,该char类型了,首先必须弄明白unicode编码表。
char类型表示单个字符,对应着unicode编码的字符单元,使用\u来表示unicode代码单元的编码,范围从\u0000-\uffff。当然还有很多其他的转义字符,他们都可以出现在字符常量或者字符串的引号内,只有\u的转移字符可以出现在引号外。
System.out.println('\u2122'); System.out.println("\u2122");打印;
™
™
为什么会有unicode编码呢?因为这之前,对字符编码美国的ASCII,欧洲的ISO 8859-1,中国的gb118030等等,使用起来标准不统一,麻烦重重,为了解决这个问题,上世纪80年代开始研究,到91年正式发布1.0版本。这些都是废话,谈起来涉及到大量编码的专业知识,和主要矛盾关系不大,嘿嘿。只需要记住,java中非常的不建议使用char类型,最好是用抽象数据类型来表示。(以后再研究)
最后一类;布尔类型boolean。他有两个值;true和false,判断逻辑条件,并且整型和布尔值不能转化。如下不要混淆。
if (x = 0) {
System.out.println("ture");
}
这样的话编译都不能通过,编译错误,因为整型和布尔在java不能转化。但是类似的写法在c++里是可以的,非0为真,0为假。
-----------------------------------------------------------------------------------------------------------------------------------
以上为粗浅的学习和复习,旨在帮助后日若遗忘的时候可以查看和查漏补缺。未完待续……
相关文章推荐
- Java千百问_06数据结构(002)_java有哪8种基本数据类型
- Java中的8种基本数据类型
- Java中8种基本数据类型及其默认值
- Java中8种基本数据类型的总结
- java 8种基本数据类型的默认值及所占字节数
- java 8种基本数据类型
- Java的8种基本数据类型
- Java之基本数据类型(8种还是9种)-yellowcong
- java 8种基本数据类型及封装类及默认值
- Java基础--->03.Java的8种基本数据类型。
- 深入源码-java数据类型-8种基本数据类型
- Java 基础知识 8种基本数据类型 equal 与==区别 Switch 使用
- 【JAVA】5、Java数据类型的划分及8种基本数据类型
- java 8种基本数据类型
- java中8种基本数据类型详解
- Java8种基本数据类型的封装,Cache
- JAVA的8种基本数据类型所占位数及初始值
- java的8种基本数据类型总结
- Java中8种基本数据类型
- Java中的8种基本数据类型