一张图参悟万恶的数据类型……

(此图为尚学堂马士兵老师上课所讲视频截图,谨向马士兵老师致敬……)


学习Java或者.Net,其数据类型的重要性可想而知,没有数据,何来程序……此为Java的数据类型,与.Net的数据类型大致相同。记住此图,便能初步掌握这几种类型,做到心中大体有个概念,不至于写程序时糊里糊涂。

注意:java和c#中的数据类型有些不同!如c#新增了sbyte带符号的数据类型,其表示-128~127,而byte则表示正整数,范围0~255。与java的byte定义还是不同的。对于两种语言的数据类型有哪些不同之处,请上网查找即可。

了解了数据类型大体分类,其数据类型之间的相互转化我觉得是基础中的基础,如若此本领没有掌握,对于后续程序中类型的转换会越来越糊涂……

数据类型间的相互转换法则!!!(纯属个人总结……)

(1)表示范围小的数能够向表示范围大的数转换(表示范围,即这个数据类型所能表示的数的范围大小(学过计算机的应该知道什么是范围的大小吧)):byte,short,char->int->long->float->double。如double d1 = 123;  123为int类型,向比它表示范围大的double类型转换,便可直接转换而不会编译错误。

(2)在这几种数据类型中,整数默认为int型,小数默认为double型。

(3)byte,short,char在参与运算(即加减乘除)时,会自动先转换为int类型,然后再参与运算。如byte b1 = 1;byte b2 = 2;int a = b1+b2;(b1+b2在运算时会各自先转换为int类型,然后再相加,得出的结果也为int类型)注意:byte b1 = 1;1为 int类型,为什么能直接赋值给byte类型呢?此有个规定,即只要一个int类型的值不超过byte,short,char的表示范围,其数值可以直接赋给byte,short,char型。byte b1 = 1+2;这个也是正确的!但如果byte a = 1;byte b = 2;byte b1 = a + b;这种是错误的!!!因为a+b在运算时会自动转换成int类型,必须要强制类型转换!即byte b1 = (byte)a+b;(即直接赋常量可以,如若不然,则对不起,不可以!)

(注意:int i1 = 123; int i2 = 456; double d = (i1 + i2) * 1.0,当执行double d = (i1 + i2) * 1.0时,int类型的i1与i2会首先转换成double类型,然后再相加,再与1.0相乘,切记自动类型转换中执行的顺序呢……亲……

(4)关于强制类型转换!byte b1 = (int)8888;int类型占4个字节,而byte类型仅占一个字节,在强制转换时,8888会从左往右砍掉自己的3个字节,留下最右边的那一个字节来表示b1。但注意!!!!如果float f1 = (float)1e200;double表示的数的范围远超float,这样强制转换会报错!因为double含有小数点,计算机无法自动地砍掉double类型数据中超的部分而转换给float。所以这种是错误的!(即double是不能强制转换成float)

这在一定程度上也解释了上述的为何int可以转换成byte,因为计算机会直接砍掉int超出的那三个字节,但鉴于double无法直接砍掉多的部分转换成float,所以double不能强制转换成float(注意,上述讲double不能强制转换成float是特指double类型的数表数范围超过float表数范围时的强制转换,若double类型的数没有超过float表数范围,则double是可以向float强制转换的,切记!)

注意:可以将float类型直接转换成long类型,即将float类型的小数部分砍去,留下的整数部分转换成long类型

补充知识点:

1)C#语言中数据类型char占用两个字节。在java中可以直接char c2 = 123;在显示char的值时会自动把123转换成相应的ASCII码对应的符号。但在C#中则不能直接这样写:char c2 = 123;

2)char c = '\u0061';这种写法实际是Unicode编码的写法,即\u就表示后面的4位数(0061)均采用16进制的方式显示。打印出c的值时,也是会把16进制的数0061转换成相对应的ASCII所对应的字符号。

注意:char c = '\u0061';只能在\u后写四个数字,不能写少于四个的数字,如char c='\u061';这样是不行的,因为char本来占用两个字节即共16个bit,而16进制每个数占4个bit,所以刚好\u后4个16进制才能满足16位。所以\u后只能写4个16进制。

如果想彻底搞明白数据类型,请自行下载马士兵老师的java基础视频看看,讲的我认为是最深入最直观的最详细的……


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值