上面的图表示出了数据类型的分类, 加上布尔型(bealoon)分为四类八种数据类型, 构成了java的基本数据类型, 这几种数据的之间的联系也是想图中的箭头一样, 数据之间有一个自动提升数据类型的机制, 在java编程中需要随时注意.
下面看一组简单的代码实例:
byte a = 127; short b = 45; char e = 'a'; float f = 21.23f; double g = 0.456; String str = "xuesheng"; String x = str+e+a; String z = e+a+str; /*对于第一个表达式xuesheng+'a'+127,先进行"xuesheng" + 'a'的运算,将把'a'转换成字符串, 将拼接成字符串xueshenga,接着进行"xueshenga" + 127的运算,这也是 一个字符串连接运算, 得到结果是xueshenga127。对于第二个表达式,先进行'a' + 127加法运算, 其中'a'自动提升到int型,变成a对应的ASCII值:97,从97 + 127将得到224 , 然后进行224 + "xuesheng",224会自动转换成字符串,将变成两个字符串的连接运算, 从而得到224xuesheng。*/ System.out.println("xuesheng+'a'+127的结果为: "+x+"\n"); System.out.println("'a'+127+xuesheng的结果为: "+z+"\n"); //当byte型和short型还有char型运算的时候, 数据类型会自动提升为int型 //char型数据的转换根据字符在ASCII码表的位置转换成数字 int in = a + e; //byte型跟字符型的运算自动提升为int型 System.out.println("in的值为: "+in+"\n"); int in1 = a + b; //byte型跟short型运算自动提升为int型 System.out.println("in1的值为: "+in1+"\n"); byte by = a += 1; //当使用+=运算符进行运算时不会自动提升数据类型 //原因是由于 += 是java语言规定的运算符, java编译器会对它进行特殊处理, 因此可以正确编译 System.out.println("by的值为: "+by+"\n"); double m = f+g; //float型和double型之间的运算结果为double型 System.out.println("m的值为: "+m);
下表列出的内容是大部分的数据类型, 其实数据类型并不只局限于那四类八种, 还有很多, 我们所了解的function函数, 包括还有很多方法都可以看成是一种数据, 然后可以对其进行操作, 学的还是太少了
Byte(字节型) | 0 - 255 |
Boolean(布尔型/逻辑型) | True 或 False |
Integer(整数型) | -32,768 ~ 32767 |
Long(长整形)
|
-2,147,483,648 ~ 2,147,483,647 |
Single
(单精度浮点型)
|
负数范围:
-3.402823E38 ~ -1.401298E-45
正数范围:
1.401298E-45 ~ 3.402823E38
|
Double
(双精度浮点型)
|
负数范围:
-1.797,693,134,862,32E308 ~
-4.940,656,458,412,47E-324
正数范围:
4.940,656,458,412,47E-324 ~
1.797,693,134,862,32E308
|
Currency
(变比整形 / 货币类型)
|
-922,337,203,685,477.5808~
922,337,203,685,477.5807
|
Decimal(十进制型) |
没有小数点时:
+/-79,228,162,514,264,337,593,543,950,335
有小数点时:
+/-7.922,816,251,426,433,759,354,395,033,5
最小的非零值:
+/-0.000,000,000,000,000,000,000,000,000,1
|
Date(时间日期型) | 100年1月1日~9999年12月31日 |
Object(对象型) | 任何 Object 引用 |
String (变长) | 长度从 0 到 大约 20 亿 |
String (定长) | 长度从 1 到大约 65,400 |
Variant (数字) | 任何数字值,最大可达 Double 的范围 |
Variant (字符) | 与字符串长度,变长 String 有相同的范围 |