Java基础(4)数据类型以及类型转换
内置数据类型
Java中,数据类型是一个很基础的东西,就像砖石之于房屋一样。代码无非是对于数据的各种操作,为了方便操作,提高效率,Java里将数据按照典型特征,分为了不同的类型。
Java中,有八种基本类型:有六种是为了数字而定义的数字类型,一种字符型,一种布尔型。然后有一种叫String的东东,因为其在Javaweb中超高的出现频率,被戏称为第九种基本类型。 八种基本类型是根据占用储存空间的长度进行划分的。我们知道,电脑通过2进制数字来进行储存数据的,基本储存单元为bit,也就是0/1。但是bit太小了,实际生产中,使用这么小的单位肯定很繁琐,所以我们又把8个bit,称呼为一个byte,也就是通俗意义上的‘字节’。
数字类型
Java中,数字类型细分之下,又可分为四种整数类型 byte、short、int、long,两种浮点数类型(小数)float,double;
整数类型
Java中,没有明确定义类型的整数,会被默认为int;
byte
这里的byte,顾名思义,就是占用8个bit空间的整数类型,这其中正负号占用一个bit,余下7个bit存放二进制数字,转换成十进制大小就是-27 到27 -1,也即是-128到127之间(为什么要减一,这个问题请向百度大大提问,这里写不下)
short
short的占位空间,是byte的两倍,两个字节共16bit,所以其大小是-215 到215 -1,也即是-32768到32767之间
int
int,是Java中使用最广泛的整数类型,同时Java中数字默认是int,其占位是byte的四倍,四个字节共32bit,-232 到232 -1,也即是-2,147,483,648到2,147,483,647,这个范围内的数字,Java都默认是int。这也就是说:
short s=1 ;
s=s+1;
这么写会报错,至于原因,我写在下面类型转换里面;
long
long的话,就比较大了,占位是byte的八倍,八个字节,共64bit,也即是-263 到263 -1,这个大小我就不算了……long型一般出现在编号这个属性上,还有时间戳也会经常使用long型来承接。属于使用频率仅次于int的整数类型。
浮点数(小数)
未被明确定义的浮点数,Java会默认为double
float与double
这两个我就放在一起了,因为浮点数其实很少用float,而且Java中,其实也是默认double的,底层甚至会把float转成double进行运算。平时使用尽量double。而且,有一点比较关键,涉及到金额之类的商业使用,不能有差错的数字,这俩都别用。咱们用BigDecimal。
字符型
char
JAVA中,char占2字节,16位。可在存放汉字
char a=‘a’; //任意单个字符,加单引号。
char a=‘中’;//任意单个中文字,加单引号。
char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。
作者:旧时光1234
链接:https://www.jianshu.com/p/3a3e5659159f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
char类型用的确实太少了,,,,我就摘了一段别的大佬的介绍。
布尔型
boolean
boolean,一般用于逻辑判断,使用Java保留字 true/false。
数据类型的使用
在具体的编码过程中,我们也常常用到这些基本类型的包装类,因为这些包装类提供了更多、更全的方法封装。
byte → Byte
short → Short
int → Integer
long → Long
float → Float
double → Double
char → Character
boolean→ Boolean
我们平时使用数据类型的时候
我们在使用集合的时候,都会用包装类,包装类与基础数据类型的区别在于,包装类实例化之后,属于对象,需要用操作对象的方式来使用。基础数据类型的话,则可以使用常规的运算符号来进行运算。而且平时使用集合时候,需要使用包装类,例如下面这种写法则会产生语法错误。
List<int> aList=new ArrayList<>();//错误
List<Integer> aList=new ArrayList<>();//正确
2019-6-27
今天补充一点,包装类虽然看起来,跟内置基础类型很像,但是使用的时候一定要将其当成对象来操作,比如
我们可以看到,如果将Integer当成int来进行直接比较的话,==操作就会出现一些问题。
在最新的jdk中,初始化集合已经不需要再次指定类型了。
基础数据类型之外的常用包装类
String
string的使用频率,几乎超越了所有的内置类型。被戏称为第九基本类型。
String s=null;
String s1="";
String s3="我";
String其实是一个object对象,所以初始化的时候,可以直接用null,也可以用双引号指定内容。注意char的话,用的是单引号
Bigdecimal
这是java.math提供的API类,常用于商业运算,能提供更精准的计算结果。
BigDecimal一共有4个构造方法:
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象
以上BigDecimal内容摘自百度百科。
说实话,我是最近才开始大量使用BigDecimal,BigDecimal提供了加减乘除的不同方法供调用,使用起来比较方便,尤其是金额操作,推荐使用这个。下面是我的一个小demo,这里解释一下,在数据库层面,我使用的是int来存放单位为分的金额,然后这里将金额数字转换成,单位为元的小数。
public static BigDecimal int2BigDecimal4Money(int i) {
BigDecimal big = new BigDecimal(i);
BigDecimal big2Div = new BigDecimal(100);
return big.divide(big2Div, 2, BigDecimal.ROUND_UP);
}
以后想到了其他的常用包装类型,我再补充。
类型之间的转换
类型转换是操作数据里面绕不过的一个操作;由于不同类型的数据,所占空间不同,所以转换的时候也是有点区别的。整数类型里面,小空间类型值转大空间类型值,是无感转换。不需要手动增加。但是大空间转小空间类型值,就需要用到一些强转方法。
我们可以把类型看作不同大小的容器,类型的之就像容器里面的鱼。
现在有个小鱼缸byte,装了条小金鱼 1,想要放到水池short里面,byte(1)转成short(1),只需要把小鱼缸byte里面的所有东西都倒在水池short里面就行了。因为水池short里面的容量,是肯定装得下byte里连鱼带水的所有东西。
但我想把short里面的小金鱼1,放到小鱼缸byte里面,就不能直接倒了,因为装不下,所以我们需要额外辅助,先把小金鱼1捞起来放到小鱼缸byte里面,然后把水倒满。今天先写到这里,我吃饭去了