[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测试代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一类:逻辑型boolean 第二类:文本型char 第三类:整数型(byte、short、int、long) c...
    Jasonme阅读 1,116评论 0 4
  • 首先明确几个概念:变量、常量。 变量即在程序运行过程中它的值是允许改变的量。是计算机语言中能储存计算结果或能表示值...
    Jason_M_Ho阅读 233评论 0 0
  • 细数那些残痕, 仿佛粒粒流沙。 再久的搬运, 终会沉积 于岩海之际。 将思绪钳固; 再汹涌的海水, 终会败给 那一...
    筱筱0201阅读 177评论 0 1
  • 前几天跟老爸聊天,他说考虑到我的专业前景目前并不太好。不如教师稳定,所以建议我去考教师资格证。 他开始说的是叫我去...
    撞了南墙再回头阅读 218评论 4 4
  • 首先,再也不敢在简书软件上面写东西了。已经发生两次东西写一半直接退出不保存了。简书带着他的小姨子跑了,我们没有办法...
    王啊白阅读 228评论 0 0