您的位置:首页 > 编程语言 > Java开发

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的四种整型
类型所占字节数范围
long8个大约是10的7次方个兆级别的数字(足够用了,没有必要强记这些大数字,理解了原理和心中明白大致的范围就行了),也就是10的19次,正负差1
int4个大约刚刚超过21亿(也是正负相差1)
short2个-32767到+32768
byte1个-128到+127
知道算法即可,一个字节为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。

long longNumber = 9223372036854775806l;


接下来是2种浮点型类型;float(单精度)和double(双精度),注意!c语言中还有一种long double类型。

java的两类浮点类型
类型字节数范围
double        8            记住有效位数为15位,相当大部分的程序都采用双精度double。

这样肯定不会错。
float4有效位数为6-7位,用的不多

比如在需要快速处理单精度数据的时候,会用到,其他情况就double就哦了
科普下浮点数;因为有小数,这个小数点漂浮不定,就像大海中的漂流物浮起来位置不定一样,我们起了个名字—浮点数,也就是科学计数法,由阶码和尾码组成,也就是有效数字和指数组成, 类似这样 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可带可不带。

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为假。

-----------------------------------------------------------------------------------------------------------------------------------

以上为粗浅的学习和复习,旨在帮助后日若遗忘的时候可以查看和查漏补缺。未完待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编码 ieee ascii unicode