System类和String类
System类
java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中常用的方法有:
- public static long currentTimeMillis():返回以毫秒为单位的当前时间
- public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。
练习:
验证一个for循环打印数字1-9999所需要的时间和数组的拷贝
package com.review;
import java.util.Arrays;
public class SystemDemo {
public static void main(String[] args) {
long start=System.currentTimeMillis();
for (int i = 1; i <10000 ; i++) {
//System.out.println(i);
}
long end=System.currentTimeMillis();
//System.out.println(end-start);
//拷贝数组
int [] arr1=new int[]{1,2,3,4,5};
int [] arr2=new int[]{6,7,8,9,10};
System.arraycopy(arr1,0,arr2,0,3);
System.out.println(Arrays.toString(arr2));
}
}
String类,StringBuilder类和StringBuffer类
String类
String类是一个final类,被final修饰的类不能被继承,因此也没有子类。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。例如:
package com.review;
public class StringDemo {
public static void main(String[] args) {
/*String s="abc";
String s1="ab";
String s2="c";
System.out.println(s==(s1+s2));*///false
String s="abc";
String s1="ab";
String s2=new String("c");
System.out.println(s==(s1+s2));//false
}
}
由此可知,如果对字符串进行拼接操作,每次拼接,都创建一个新的String对象,既耗时,又浪费空间。为了解决这一个问题,可以使用java.lang.StringBuilder类。
StringBuilder类
java.lang.StringBuilder又称为可变字符序列,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变序列的长度和内容。StringBuilder不是线程同步的,因此不安全。
StringBuilder类是个字符串缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新的内容。StringBuilder会自动维护数组的扩容。
StringBuilder常用的两个方法
- public StringBuilder append(任意类型):添加任意类型数据的字符串形式,并返回当前对象自身
- public String toString():将当前的StringBuilder对象转为String对象
StringBuffer类
StringBuffer类用法与StringBuilder类相同,只不过StringBuffer是线程安全的。在不考虑线程安全的情况下,我们优先使用StringBuilder类,效率更高。