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