[JAVA][数据类型]

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][数据类型])