本笔记大部分内容来自:微学苑
对于整型数据,通常情况下使用 int 类型。但如果表示投放广岛长崎的原子弹释放出的能量,就需要使用 long 类型了。byte 和 short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。
八进制有一个前缀 0,例如 010 对应十进制中的 8;十六进制有一个前缀 0x,例如 0xCAFE;从 Java 7 开始,可以使用前缀 0b 来表示二进制数据,例如 0b1001 对应十进制中的 9。同样从 Java 7 开始,可以使用下划线来分隔数字,类似英文数字写法,例如 1_000_000 表示 1,000,000,也就是一百万。下划线只是为了让代码更加易读,编译器会删除这些下划线。
float 类型有效数字最长为 7 位,有效数字长度包括了整数部分和小数部分。 double 类型有效数字最长为 15 位。与 float 类型一样,double 后面也带有标志“D”或“d。 注意:不带任何标志的浮点型数据,系统默认是 double 类型。 大多数情况下都是用 double 类型,float 的精度很难满足需求。
Java中也有 printf() 语句,用来控制输出格式,不过实际开发中不常用,因为输出到控制台的数据很少要求严格的格式,一般println() 和 print() 就够了。
println() 输出内容后换行,print() 不换行。
Java 中定义数组的语法有两种:
int demoArray[];
int[] demoArray;
type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符 与C、C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new,其格式如下:
arrayName=new type[arraySize];
通常,
int demoArray[] = new int[3];
// 静态初始化
// 静态初始化的同时就为数组元素分配空间并赋值
int intArray[] = {1,2,3,4};
String stringArray[] = {"微学苑", "http://www.weixueyuan.net", "一切编程语言都是纸老虎"};
// 动态初始化
float floatArray[] = new float[3];
floatArray[0] = 1.0f;
floatArray[1] = 132.63f;
floatArray[2] = 100F;
int arrayDemo[] = {1, 2, 4, 7, 9, 192, 100};
for(int i=0,len=arrayDemo.length; i<len; i++){
System.out.println(arrayDemo[i] + ", ");
}
增强版Foreach:(类似python中的for x in …:)
int arrayDemo[] = {1, 2, 4, 7, 9, 192, 100};
for(int x: arrayDemo){
System.out.println(x + ", ");
}
Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。
几点说明:
字符串可以通过“+”连接,基本数据类型与字符串进行“+”操作一般也会自动转换为字符串。
import java.util.*;
public class Demo {
public static void main(String[] args){
String str = "wei_xue_yuan_is_good";
String strArr[] = str.split("_");
System.out.println(Arrays.toString(strArr));
}
}
运行结果: [wei, xue, yuan, is, good]
String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间。
StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String。
StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。
StringBuffer不像String,只能通过 new 来创建对象,不支持简写方式,例如: StringBuffer str1 = new StringBuffer(); // 分配16个字节长度的缓冲区 StringBuffer str2 = =new StringBuffer(512); // 分配512个字节长度的缓冲区 // 在缓冲区中存放了字符串,并在后面预留了16个字节长度的空缓冲区 StringBuffer str3 = new StringBuffer(“www.weixueyuan.net”);
StringBuffer类中的方法主要偏重于对于字符串的操作,例如追加、插入和删除等,这个也是StringBuffer类和String类的主要区别。实际开发中,如果需要对一个字符串进行频繁的修改,建议使用 StringBuffer。
str.setCharAt(3, 'z');```该代码将把索引值为3的字符修改为 z,最后str所指向的字符串为 abczef。
### 效率对比
StringBuffer的执行效率比String快上千倍,这个差异随着叠加次数的增加越来越明显,当叠加次数达到30000次的时候,运行结果为:
String: 35923ms
StringBuffer: 8ms
所以,强烈建议在涉及大量字符串操作时使用StringBuffer。
## StringBuilder
StringBuilder类和StringBuffer类功能基本相似,方法也差不多,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。
速度:
一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。
**使用环境:**
操作少量的数据使用 String;
单线程操作大量数据使用 StringBuilder;
多线程操作大量数据使用 StringBuffer。