package Test;
/**
* String类型-不可变字符序列
* @author pmc
*
*/
public class StringTest2 {
public static void main(String[] args){
String s1=new String("abcdef");
String s2=s1.substring(2, 4);
System.out.println(Integer.toHexString(s1.hashCode()));
System.out.println(Integer.toHexString(s2.hashCode()));
String str1="hello"+"java";
String str2="hellojava";
System.out.println(str1==str2);//true编译器做了优化,直接在编译的时候将字符串进行拼接
String str3="hello";
String str4="java";
String str5=str3+str4;
System.out.println(str2==str5);//false编译时不知道变量中存储的是什么所以没办法在编译的时候优化
System.out.println(str2.equals(str5));//true做字符串比较时使用equals不要使用==
}
}
package Test;
/**
* 测试StringBuilder/StringBuffer
* @author pmc
*
*/
public class StringBuilderTest {
public static void main(String[] args){
//StringBuilder线程不安全,效率高
StringBuilder sb=new StringBuilder("123");
System.out.println(sb);
System.out.println(Integer.toHexString(sb.hashCode()));
/**
* public StringBuilder append(String str) {
* super.append(str);
* return this;//返回当前对象【链式调用】
* }
* 可变字符序列的常用方法
*/
sb.append(123).append("asdf");//追加
sb.setCharAt(3, 'x');//修改某个元素
System.out.println( sb.substring(2));//去掉某些元素
System.out.println(sb);
sb.reverse();//倒序
System.out.println(sb);
sb.insert(0, "我");//某个位置插入内容
System.out.println(sb);
sb.deleteCharAt(0);//删除
System.out.println(sb);
System.out.println(Integer.toHexString(sb.hashCode()));//对象地址
System.out.println("----------------------");
/**
* 使用StringBuilder不要使用String,Sting太占用内存且速度慢
*/
StringBuilder str9=new StringBuilder("");
for(int i=0;i<5000;i++){
str9.append(i);
}
System.out.println(str9);
//StringBuffer线程安全,效率低
StringBuffer sf=new StringBuffer();
System.out.println(sf);
}
}