Java数据类型简介:
Java是一种强类型的语言,数值类型主要分为基本数据类型和引用数据类型,其中基本的数据类型分为8种,具体细节点及一些注意点如下。
java中的基本数据类型:
字符类型:
关键字:char 所占字节:2字节
细节点:1、java中的字符类型采用Unicode编码,加之2字节,因此java中的数据类型可以直接存储一个汉字,例如:char sex = ‘男‘;
注意点:1、声明字符类型时用的是单引号‘ ‘,而不是双引号"";
2、其实在正常开发中,绝大多数汉字所占的字节不止2个字节,所以在这里要特别注意;
布尔类型:
关键字:boolean 所占字节:1字节
细节点:1、只有两个值:true 或者 false
注意点:在条件语句中java是不允许像C/C++语言将数值类型0或非0充当true或者false的,而是仅仅允许true或false。
数值类型:
java中的数值类型又分为整数型和浮点型,其中整数型可以理解为整数,浮点类型可以通俗的理解为小数。
整数型:
关键字:byte 所占字节:1字节 中文简称:字节型
关键字:short 所占字节:2字节 中文简称:短整型
注意点:使用short类型时应注意其数值类型范围,避免越界溢出
关键字:int 所占字节:4字节 中文简称:整型
细节点:1、java中对于整型如没有特定的类型指定,则默认被声明为int型
2、通常把整数声明为int型
所以在平时开发中,int类型是用的最多的;
例 声明:
int i;
int num = 1;
在这里多说明一个知识点,自动拆装箱
有时需要将int这样的基本数据类型转换为引用类型对象,
例如:
Integer i = 10;
相当于:Integer i = new Integer(10);
这样的话,这里的i,就已经是一个引用类型了;
还有一种方法,耍点小聪明:
int i = 10;
String str = i+"";
这里的 str 值同样是10,但是它已经是引用数据类型了;
同理:引用数据类型转换为基本数据类型;
String str = "10";
int i = new Integer(str);
这里的i就已经变量一个基本数据类型了,可以进行正常的数值计算了;
关键字:long 所占字节:8字节 中文简称:长整型
注意点:由于java默认将整型定义为int型,所以当使用long类型时应该加上后缀L或小写的l,但是小写的l通常和1容易混淆,通常用大写的L作为其后缀
浮点类型:
Java中的浮点类型又分为两种,单精度浮点型和双精度浮点型,其中双经度浮点型的精确度要比单经度浮点型的精确度要高。
单精度浮点型:
关键字:float 所占字节:4字节 中文简称:单精度浮点型
细节点:由于在Java中默认对于浮点型数值使用Double类型存储,当使用float类型时应在声明其后加上大写的F或小写的f作为其后缀。
注意点:short
a = 1.35; short b = a +
12.56;注意这里由于12.56没有为其执行数值类型,所以默认为double类型,+会对前面的a自动进行精度提升为double类型的,那么其整个计算结果就是double类型的,而与short类型的结果声明的不符。
双精度浮点型:
关键字:double 所占字节:8字节 中文简称:双精度浮点型
注意点:Java中对于小数默认定义的数值类型为double类型,当使用double类型时可在其后加上大写的D或小写的d作为其后缀。
java中的自动类型提升:
当进行计算时,java会对类型自动进行数值类型提升,具体来说就是提升表示范围小的数值类型到整个表达式中数据类型表示范围最大的,常常发生在以下两个方面:
1、表达式中作为操作数或运算子整型提升:12.3f
+ 12.5
其中12.5没有显式的为其指定数据类型,则对于浮点型数值java默认为其指定为double类型,再参与运算式的运算,但前面是float类型,java为了不让整体精度丢失会默认把float类型的运算子自动提升为精度更高的double类型并让其继续参与运算。
2、表达式中为结果进行的自动类型提升:例如 double a = 12.5f + 12.3f;虽然整个表达式中的运算部分均为float类型但是所要赋予的结果是double类型的,则java会对其进行精度提升为double类型的。
java的强制类型转换:
java中的自动类型转换某些方面说是发生在 低精度 → 高精度 的情况的,而java中的强制类型转换某些方面说是发生在 高精度 → 低精度 的情况。
java中的自动类型转换是系统自动的,而java中的高精度类型转换则是手动的由程序编制人员手工强制的,因为显然提升精度并不会造成什么伤害而降低精度则常常会产生伤害,例如银行中所存定的钱数或者利息等。所以一个Java自动一个要程序员手动强制。
java中的强制类型转换的语法为:(要转换到的数据类型)要转换的参数或值
例如:(int)12.5 + 12.3
其中12.5会自动转换为12,对于正数java无论四舍五入,都将其转换为向下最靠近的正整数,负数则将其向上转换为最靠近的负整数例如:(int)-12.5会被转换为-12,注意这里仅仅转换距离(int)最近的一个参数,此例子中仅仅对12.5发生强制转换而不会连12.3也转换。
其他:
不恰当的转换会造成数值的溢出,关于溢出的具体情况大家可以参考博客园的其他园友的文章。另外Java中的数值类型的长度无论在什么机器上都是固定的,而非像C/C++语言一样在16位机器上int是多少位而到32位的机器上int又变成了多少位的适应性固定。
如果工作涉及到数据分析方面的时候,一般我们的这些基本数据类型并不能满足正常的开发需求的,总会有一些小的bug,例如有些计算会让我们的数值失去精度,关于这点,下次我们再详细讲解!
谢谢!