今天依旧记录一下今天的学习的知识。

 /**
* 测试StringBuilder StringBuffer,可变字符序列
* String对象称为“不可变对象"指的是对象内部成员变量的值无法再改变
* @author 小白
*
*/ public class TestBuilder {
public static void main(String[] args) { //StringBuilder线程不安全,效率高(一般使用它);StringBuffer线程安全,效率低
StringBuilder sb = new StringBuilder("abcdefg"); System.out.println(Integer.toHexString(sb.hashCode()));
System.out.println(sb); sb.setCharAt(2, 'M');
System.out.println(Integer.toHexString(sb.hashCode()));
System.out.println(sb);
}
}
 /**
* 测试StringBuilder StringBuffer可变字符序列的常用方法
* @author 小白
*
*/
public class TestStringBuilder3 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); for(int i=0;i<26;i++){
char temp = (char)('a'+i);
sb.append(temp);
} System.out.println(sb);
sb.reverse();//倒序
System.out.println(sb);
sb.setCharAt(3, '高');//替换字符
System.out.println(sb);
sb.insert(0, '我').insert(6, '大');//链式调用,核心就是:该方法调用了return this,把自己返回了。
System.out.println(sb);
sb.delete(10, 20);
System.out.println(sb);
}
}
 /**
* 测试可变字符序列和不可变字符序列使用的陷阱
* @author 小白
*
*/
public class TestStringBuilder4 {
public static void main(String[] args) { /*使用String进行字符串的拼接*/
String str8 = "";
//本质上使用StringBuilder拼接,但是每次循环都会生成一个StringBuilder对象
long num1 = Runtime.getRuntime().freeMemory();//获取系统剩余内存空间
long time1 = System.currentTimeMillis();//获取系统的当前时间
for(int i=0;i<5000;i++){
str8 = str8 + i;//相当于产生了10000个对象
}
long num3 = Runtime.getRuntime().freeMemory();
long time2 = System.currentTimeMillis();
System.out.println("String占用内存:" + (num1 - num3));
System.out.println("String占用时间:" + (time2 - time1)); //以后因该使用StringBuilder的append()的方法进行字符串的拼接,切记切记
/*使用StringBuilder进行字符串的拼接*/
StringBuilder sb1 = new StringBuilder("");
long num4 = Runtime.getRuntime().freeMemory();
long time3 = System.currentTimeMillis();
for(int i=0;i<5000;i++){
sb1.append(i);
}
long num5 = Runtime.getRuntime().freeMemory();
long time4 = System.currentTimeMillis();
System.out.println("StringBuilder占用内存" + (num5 - num4));
System.out.println("StringBuilder占用时间" + (time4 - time3)); } }

Java的学习02-LMLPHP

05-11 13:19