JAVA学习笔记二之(4)数据类型

JAVA学习笔记二之(4)数据类型

Java语言就是为了编写程序,编写程序是为了把现实世界的操作通过程序给模拟出来。

Java中的数据类型就是为了方便表示现实世界的数据的。

一、数据类型的分类
    java中的数据类型按照大的分类分为2种:基本数据类型和引用数据类型(了解)。
二、基本数据类型: 4类8种。
    1、整数:
        A:byte    1字节
        B:short   2字节
        C:int       4字节
        D:long    8字节
        整数默认是int类型。

        要想表示long类型的数据,在后面加上l或者L。建议加L。

    2、浮点数:

        A:float       4字节
        B:double   8字节

        浮点数据的表示:

            1.23456
            12345.678
            3.14E12

        浮点数默认是double类型。

        要想表示float类型的数据,在后面加f或者F。

    3、字符:

        char    2字节
    4、布尔:
        boolean    1字节

    5、面试题:

        java中的字符能够存储一个汉字么?
        答:能。因为Java语言采用unicode编码,每一个字符占用两个字节。
    6、注意:
        A:类名和文件名的问题
            java文件的名称可以和类名不一致。
            但是要注意:编译的时候,编译文件名称。运行的时候,运行类名。
            由于名称的不一致,可能会导致混乱,所以,建议,类名和文件名一致。
        B:变量的范围。
            定义的变量在它所属的那对{}内有效,并且,该{}对内不能重复定义。
    7、举例
class DataTypeDemo {
    public static void main(String[] args) {
        //定义一个byte类型的变量
        byte b = 10;
        System.out.println(b);
        //可能损失精度:超出范围了
        //byte b2 = 200;
        //System.out.println(b2);

        //定义一个short类型的变量
        short s = 10;
        System.out.println(s);

        //定义一个int类型的变量
        int i = 10;
        System.out.println(i);

        //错误: 过大的整数: 1000000000000000000
        //int j = 1000000000000000000;

        //定义一个long类型的变量
        long number = 1000000000000000000L;
        System.out.println(number);

        //定义一个float类型的变量
        // 错误: 可能损失精度
        float f = 12.345f;
        System.out.println(f);

        //定义一个double类型的变量
        double d = 12.345;
        System.out.println(d);

        //定义一个字符类型变量
        char c = 'a';
        System.out.println(c);

        //定义一个布尔类型的变量
        //错误: 已在方法 main(String[])中定义了变量 b
        //boolean b = true;
        boolean flag = true;
        System.out.println(flag);
    }
}
三、数据类型转换
    在运算操作的时候,数据的类型要求一致,但是很多时候,我们会遇到不一致也可以的情况。原因很简单,因为它们做了自动转换(隐式转换)。
    1、隐式转换:小的类型到大的类型。
        byte,short,char –> int –> long –> float –> double

        A:boolean类型不参与数据的转换。

        B:byte,short,char之间不转换,它们参与运算都首先转换为int类型。

class DataTypeDemo2 {
    public static void main(String[] args) {
        byte b = 10;
        int i = 100;

        //这里按说会有问题,但是现在没有,到底为什么呢?
        //System.out.println(i + b);

        //一般来说,做运算操作的两个数据的类型应该是一致的才可以。

        //错误: 可能损失精度
        /*
        byte bb = b + i;
        System.out.println(bb);
        */

        int j = b + i;
        System.out.println(j);
    }
}
:     2、强制转换
        直接把大类型赋值给小类型是不可以的。但是,我们有另外的方式,让它可以。
        强制转换的定义:从大的类型的数据到小的数据类型的数据。
        强制转换的格式:目标数据类型 变量名 = (目标数据类型)原始数据;
class DataTypeDemo3 {
    public static void main(String[] args) {
        int x = 10;
        byte b = 10;

        //byte类型提升为int类型,结果为int类型
        //int y = x + b;
        //System.out.println(y);

        //把x的值赋值给b变量
        //b = x;

        //目标数据类型 变量名 = (目标数据类型)原始数据;
        //byte bb = (byte)x;

        byte bb = (byte)(x + b);
        //byte bb = (byte)x + b; //注意,要把后面的整体加括号。
        System.out.println(bb);
    }
}

四、面试题

A:请问下面的那条语句有问题,如果有,请问是什么问题。
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
System.out.println(b3);
byte b4 = 3 + 4;
System.out.println(b4);
—————————————————————————————-
答:byte b3 = b1 + b2;有问题。
    编译器在处理的时候,如果看到的是变量,就直接提示类型,然后计算。
    如果是常量,就先计算,然后看是否在范围内,如果不是就报错。


B:请问下面的程序有木有问题,如果有请给出解决方案,并说出最终的结果。
byte b = 130;
—————————————————————————————-
分析步骤如下:
    A:看到130,我就知道该数据默认是int类型。
    B:而int类型的数据,占用4个字节。
    C:把130用int类型的字节数表示。
        130十进制 – 二进制
        由于130是个正数,所以,它的原码,反码,补码的值都一样的。
        所以,130在内存中的存储就是如下表示:
        00000000 00000000 00000000 10000010
    D:byte b = (byte)130;
        这个动作其实就是把130截取剩余1个字节,而且是低位的字节数据。
        补码:
            1 0000010
        反码:
            1 0000001
        原码:
            1 1111110

class DataTypeDemo5 {
    public static void main(String[] args) {
        //面试题1
        byte b1 = 3;
        byte b2 = 4;
        //byte b3 = b1 + b2;  //有问题
        //System.out.println(b3);
        byte b4 = 3 + 4; //常量相加,编译器的处理是先加,然后看值是否在byte范围内。如果在就不报错。
        System.out.println(b4);
        System.out.println("------------------------");

        //面试题2
        //byte b = 130; //-128~127之间。
        //有问题。
        //解决方案:做强制类型转换
        byte b = (byte)130;
        System.out.println(b);

        System.out.println("-----------------------");
        System.out.println((byte)127);
        System.out.println((byte)128);
        System.out.println((byte)129);
        System.out.println((byte)130);
        System.out.println((byte)131);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值