美文网首页
[JAVA][数据类型]

[JAVA][数据类型]

作者: lgy_gg | 来源:发表于2017-08-23 11:41 被阅读0次

    1.落笔缘由

    最近又闲下来了,有时间翻看以前的东西,继续之前的朝花夕拾。

    2.数据类型

    (1)基本数据类型

    基本数据类型有八种,
    整型:byte,short,int ,long
    浮点型:float,double
    布尔型:boolean
    字符型:char
    八种基本数据类型的字节数,
    byte 字节型:1 byte
    short 短整型:2 byte
    int 整型:4 byte
    long 长整型:8 byte
    float 浮点型(单精度):4 byte
    double 浮点型(双精度):8 byte
    boolean 布尔型:1/8 byte(也就是1bit)
    char 字符型:2 byte
    基本数据类型转换原则
    低精度转高精度单位不会丢失精度。高精度转低精度会丢失精度。

    (2)String类型(字符串类型)

    String类型不属于基本数据类型,最基础的差别就是基本数据类型是保存在栈里,而String是保存在字符串常量池中。
    关于String类型和基本类型的相互转换,可以去查看String常用方法一文。
    String,StringBuffer和StringBuilder区别。他们都是用于生成和操作字符串。

    String:字符串常量,它被final修饰,字符串长度不可变。每次赋值或new都会在字符串常量池(如果常量池不存在该字符串)生成一个新的字符串。

    String str = "text";
    str = "text2"//这里会将text2字符串保存到字符串常量池中
    String str2 = new String("text");
    str2 = "text2"//这里会将text2字符串保存到字符串常量池中
    

    StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer。

    StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。java.lang.StringBuilder是一个可变的字符序列,是JDK5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。

    执行速度比较:StringBuilder > StringBuffer > String
    虽然StringBuilder 比StringBuffer 执行快一些,但我们还是要在是否要求线程安全的前提下做出选择。

    (3)enum类型(枚举类型)

    1)枚举可以用来充当常量使用:

        private void testColor()
        {
            for (Color color : Color.values()) {
                Log.i("lgy", "name:"+color.name()+" id:"+color.ordinal());
            }
        }
        
        public enum Color
        {
            red,yellow,blue,green
        }
    

    2)枚举充当常量的同时用于switch:

        public enum Color
        {
            red,yellow,blue,green
        }
        
        private void switchColor(Color color)
        {
            switch (color) {
            case red:
                Log.i("lgy", "red");
                break;
            case yellow:
                Log.i("lgy", "yellow");
                break;
            case blue:
                Log.i("lgy", "blue");
                break;
            case green:
                Log.i("lgy", "green");
                break;
            default:
                break;
            }
        }
    

    在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,开始对String支持。

    3)带参数的枚举常量

    public enum Color2 {  
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4);  
        // 成员变量  
        private String name;  
        private int index;  
        // 构造方法  
        private Color2(String name, int index) {  
            this.name = name;  
            this.index = index;  
        }  
        // 普通方法  
        public static String getName(int index) {  
            for (Color2 c : Color2.values()) {  
                if (c.getIndex() == index) {  
                    return c.name;  
                }  
            }  
            return null;  
        }  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getIndex() {  
            return index;  
        }  
        public void setIndex(int index) {  
            this.index = index;  
        }  
    }
    
    
    private void testColor2()
    {
        for (Color2 color : Color2.values()) {
            Log.i("lgy", "name:"+color.name()+" id:"+color.ordinal());
            //根据Color2定义的方法获取变量
            Log.i("lgy", "name2:"+color.getName()+"id2:"+color.getIndex());
        }
    }
    

    关于枚举的详细用法可以去查看这篇文章。

    (4)数组类型

    Java 语言中提供的数组是用来存储固定大小的同类型元素。
    1)初始化数组

        private void testArray()
        {
            //创建数组,如果在创建的同时不初始化数组则必须指定其大小
            int[] intArr = new int[5];
            //创建数组时,不指定数组大小则必须在创建的同时初始化数组
            int[] intArr2 = new int[]{1,2,3};
        }
    

    2)Array转list

        private void testArray()
        {
            //创建数组,如果在创建的同时不初始化数组则必须指定其大小
            int[] intArr = new int[5];
            //创建数组时,不指定数组大小则必须在创建的同时初始化数组
            //这里list.size()=1
            int[] intArr2 = new int[]{1,2,3};
            List list = Arrays.asList(intArr2);
            for (int i = 0; i < list.size(); i++) {
                Log.i("lgy", ""+list.get(i));
            }
            
            //这里list.size()=3,可以看出Arrays.asList(T)操作的是对象
            Integer[] intArr3 = new Integer[]{1,2,3};
            List list2 = Arrays.asList(intArr3);
            for (int i = 0; i < list2.size(); i++) {
                Log.i("lgy", ""+list2.get(i));
            }
        }
    

    数组还有很多其他知识,这里就不讲那么多了。

    3.源码地址

    enum测试代码

    相关文章

      网友评论

          本文标题:[JAVA][数据类型]

          本文链接:https://www.haomeiwen.com/subject/viqrdxtx.html