Java学习第一篇 — 字符串

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));
    }
}

猜你喜欢

转载自www.cnblogs.com/zjrblog/p/10700754.html
今日推荐