黑马程序员技术交流社区

标题: 【南京校区】Java中的类型转换 [打印本页]

作者: 大蓝鲸Java    时间: 2019-7-19 12:00
标题: 【南京校区】Java中的类型转换
1.基本数据类型对应的包装类
        包装类,其实就是把基本数据类型变成对应的对象。
        好处;其实就可以来调用方法,简化操作。

        我们就必须有一个类去表示这个对象。

        基本数据类型所对应包装类的类名:把首字母变成大写。int 跟 char 有点特殊
        byte        Byte
        short   Short
        int     Integer
        long        Long
        float        Float
        double  Double
        char        Character
        boolean        Boolean

                //以上的8种都是基本数据类型所对应的包装类
                //在这些类中都定义了很多的方法来帮我操作基本数据类型。
                //比如:基本数据类型中,最大值。
                        //int类型的最大值。
       
2.获取Integer对象的方式
        Integer i = 100;


        引申:
                Integer i = 100;
                底层:
                        会看100是否在byte的取值范围之内,如果在直接从数组中拿
                                                                                         如果不在,那么直接new Integer的对象。


        目的:
                因为在实际开发中,byte取值范围之内的值,用的非常多。
                如果用一次new一次,那么浪费空间。
                不管用多少次,只要是在byte的取值范围之内,提前给你准备好了,用的时候直接拿。
               
        cache 数组:byte常量池。
                                池子中装的:-128 - 127 之间每一个值的Integer对象。



3.int和String的相互转换
        每种方式记住一个最为简单,在工作中最为常用的方法就可以了。
        int --> String
                 + "";
                        //任意数据类型变成字符串 都可以加一个双引号。


        String --> int
                int i = Integer.parseInt("123");//记忆的。

                int i = Integer.parseInt("abc");//类型转换异常。                       

        注意点:
                字符串中必须是数字类型也可以。


4.自动装箱和自动拆箱
装箱:基本数据类型 变成 引用数据类型
        拆箱:引用数据类型 遍历 基本数据类型

        自动:不需要我们自己完成。


        自动装箱:Java帮我们已经完成了基本数据类型变成包装类的操作,不需要我们自己手写代码实现。

        自动拆箱:Java帮我们已经完成了包装类变成基本数据类型的操作,不需要我们自己手写代码实现。

        案例:
                Integer i  = 100; //触发了自动装箱

                Integer i1 = 10;//触发了自动装箱,把一个基本数据类型变成了包装类。
                Integer i2 = 20;//触发了自动装箱,把一个基本数据类型变成了包装类。


                Integer i3 = i1 + i2;//两个对象怎么能相加呢?
                                                //此时触发了自动拆箱。
                                                //先把i1和i2这两个对象拆箱成基本数据类型,再用基本数据类型进行相加
                                                //再把相加之后的结果,自动装箱成Integer对象赋值给i3.


//了解
byte常量池的触发时机?
        Integer i = new Integer(10);//此时不会触发

        只有在直接赋值的时候触发byte常量池机制。
        如果直接赋的值,是在byte的取值范围之内,就从常量池中拿。
        如果不在byte取值范围之内,就new。

        好处:可以结束内存空间。



引申:
        键盘录入的引申。
        基础班:Scanner
                        整数:nextInt
                        小数:nextDouble
                        字符串:next

        有一个小弊端:
                next无法接受带有空格的字符串。
                且nextInt,nextDouble在遇到字母的时候会报错。

       
以后的写法:
        不管录入什么样的数据请一律使用:nextLine。
        如果你想要用整数类型。再进行类型的转换就可以了。


        Scanner sc = new Scanner(System.in);
        System.out.println("请录入一个数");
        String line = sc.nextLine();//abc
        int i = Integer.parseInt(line);
//思想:
        不管数据怎么样,先把他录到内存里面。






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