package StringTest; public class TestString { public static void main(String[] args){ // String str="aaaddd"; // String str2=str.substring(2,5); // System.out.println(str); // System.out.println(str2); //编译器做了优化,直接在编译的时候将字符串进行拼接 String str1="hello"+"java"; String str2="hellojava"; System.out.println(str1==str2); String str3="hello"; String str4="java"; //编译的时候不知道变量中存储的是什么,所以没办法在编译的时候优化 String str5=str3+str4; System.out.println(str2==str5); System.out.println(str2.equals(str5)); /* 输出: true false true 进行字符串比较时,必须使用equals()函数 */ } }
package StringTest; /* *测试StringBuilder、StringBuffer可变字符序列 * * */ public class TestStringBuilder { public static void main(String[] args){ String str; //StringBuilder线程不安全,效率高(一般使用这个);StringBuffer线程安全,效率低。 StringBuilder sb=new StringBuilder("abcdef"); System.out.println(Integer.toHexString(sb.hashCode())); //转换成哈希字符串输出 System.out.println(sb); sb.setCharAt(2,‘M‘); //把下标为2的字符替换为"M" System.out.println(Integer.toHexString(sb.hashCode())); //转换成哈希字符串输出 System.out.println(sb); /* 输出: 1b6d3586 abcdef 1b6d3586 abMdef 结果显示:StringBuilder定义的字符串在改变字符时不会产生多个对象,在原字符中直接替换,节约内存 */ } }
package StringTest; public class TestStringBuilder2 { public static void main(String[] args){ StringBuilder sb=new StringBuilder(); for(int i=0;i<26;i++){ sb.append((char)(‘a‘+i)); //26个英文字母 } 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,23); //删除区间内的字符(字符下标) System.out.println(sb); /* 输出: abcdefghijklmnopqrstuvwxyz zyxwvutsrqponmlkjihgfedcba zyx高vutsrqponmlkjihgfedcba 我zyx高v爱utsrqponmlkjihgfedcba 我zyx高v爱utsedcba */ } }
package StringTest; /* 测试可变字符序列和不可变字符序列使用的陷阱 */ public class TestStringBuilder3 { public static void main(String[] args){ /* 使用String进行字符串的拼接 */ String str8=""; long num1=Runtime.getRuntime().freeMemory();//获取系统剩余内存 long time1=System.currentTimeMillis(); //获取系统的当前时间 for(int i=0;i<5000;i++){ str8=str8+i; //相当于产生了10000个对象,绝对不能出现 } long num2=Runtime.getRuntime().freeMemory(); long time2=System.currentTimeMillis(); System.out.println("String占用内存:"+(num1-num2)); System.out.println("String占用时间:"+(time2-time1)); StringBuilder sb1=new StringBuilder(""); long num3=Runtime.getRuntime().freeMemory(); long time3=System.currentTimeMillis(); for(int i=0;i<5000;i++){ sb1.append(i); //直接将字符加到sb1后面,不会产生多余的对象。 } long num4=Runtime.getRuntime().freeMemory(); long time4=System.currentTimeMillis(); System.out.println("StringBuilder占用内存:"+(num3-num4)); System.out.println("StringBuilder占用时间:"+(time4-time3)); } }
原文地址:https://www.cnblogs.com/zjrblog/p/10700754.html
时间: 2024-07-30 13:52:10