黑马程序员技术交流社区

标题: 数据类型及数据类型之间的转换 [打印本页]

作者: 邱石    时间: 2015-6-8 07:00
标题: 数据类型及数据类型之间的转换
7:数据类型(掌握)
        (1)Java是一种强类型语言,针对每种数据都提供了对应的数据类型。
        (2)分类:
                A:基本数据类型:4类8种
                B:引用数据类型:类,接口,数组。
        (3)基本数据类型
                A:整数                        占用字节数           范围
                        byte                        1        -128--127
                        short                        2        -2^15--2^15-1
                        int                         4        -2^31--2^31-1
                        long                        8        -2^63--2^63-1
                B:浮点数
                        float                        4        -3.403E38--3.403E38
                        double                        8        -1.798E308--1.798E308
                C:字符
                        char                        2
                D:布尔
                        boolean                        1
                       
                注意:
                        整数默认是int类型,浮点数默认是double。
                       
                        长整数要加L或者l,建议用L。long j=100000000L
                        单精度的浮点数要加F或者f,建议用F。float h=12.345F

8:数据类型转换(掌握)
        (1)boolean类型不参与转换
        (2)默认转换
                A:从小到大
                B:byte,short,char -- int -- long -- float -- double
                C:byte,short,char之间不相互转换,直接转成int类型参与运算。
        (3)强制转换
                A:从大到小
                B:可能会有精度的损失,一般不建议这样使用。
                C:格式:
                        目标数据类型 变量名 = (目标数据类型) (被转换的数据);
                例:byte a=3;   int b=4;    int c=a+b (默认转换)
                byte c=(byte)(a+b)强制转换
9:思考题和面试题:
(1)下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;
答:f1其实是通过一个double类型转换过来的。
    而f2本身就是一个float类型。通常会使用第二种方法。
(2)下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3, b2 = 4 ,b;
b = b1 + b2;
b = 3 + 4;
答:b=b1+b2有问题,因为变量相加,会首先看类型,最后把结果赋值时也会看类型。上面b1+b2的结果是int类型。所以会出错
而b = 3 + 4是常量相加,首先会做加法,然后看结果是否在赋值的数据类型范围内,如果不是,就会报错。
(3)下面的操作结果是什么呢?
byte b = (byte)130;
答;因为byte的范围是-128到127.而130不在这个范围内,所以会报错。我们可以使用强制类型转换。byte b=(byte)130;
结果是多少呢?
分析过程:我们要想知道结果是什么,就应该知道是如何进行计算的。而计算机中的数据的运算都是补码进行的。要得到补码,就要首先计算出数据的二进制。
A:获取130这个数据的二进制
00000000 00000000 00000000 100000010
这是130的原码,因为是正数,所以也是它的反码,补码。
B:因为byte只有一个字节,所以需要截取。
100000010
这个结果是截取成byte后的补码。
C:已知补码,要求原码
       符号位      数值位
补码     1         0000010
反码     1         0000001(向上借位减1)
原码     1         1111110
通过原码将二进制转换成十进制就是126,又因为首位是1,所以是-126.

(4)字符参与运算
字符与整数相加结果是整数
是查找ASCII里面的值
'a'                97
'A'                65
'0'                48
                       
System.out.println('a');//a
System.out.println('a' + 1);//97+1=98

(5)字符串参与运算
字符串数据和其他数据做+,结果是字符串类型,这里的+其实是字符串的连接符。
                       
System.out.println("hello"+'a'+1);//helloa1
System.out.println('a'+1+"hello");//98hello
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5


作者: 夏尔    时间: 2015-6-8 07:20
很棒很详细 楼主辛苦了
作者: 邱石    时间: 2015-6-8 07:22
夏尔 发表于 2015-6-8 07:20
很棒很详细 楼主辛苦了

谢谢,一起加油,一起努力
作者: zheng72566    时间: 2015-6-8 07:30
比较详细了
作者: 邱石    时间: 2015-6-8 07:46
zheng72566 发表于 2015-6-8 07:30
比较详细了

有不足之处还望指出。
作者: 开弓没有回头箭    时间: 2015-6-8 08:39
很详细了,顶起




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2