String.valueOf() 将其他类型的值转换成字符串类型
String.intern() 该方法会将字符串常量池中的字符串与外部的字符串(s)进行比较,如果共享池中有与之相等的字符串,则不会将外部的字符串放到共享池中的,返回的只是共享池中的字符串地址;如果不同则将外部字符串放入共享池中,并返回其字符串的句柄(引用)-- 这样做的好处就是能够节约空间
StringBuilder s=new StringBuilder("计算机");
s.append("软件");
说明StringBuilder是可变字符串,而String是不可变的,final char[](源码分析)
StringBuilder的对象存储在java堆中,而String存储在方法区中。
-----------------------------------------------------------------------------------
String的equal方法与==的比较:
==用于判断地址是否相等,也就是指针
equals()用于判断内容是否相等
String s1="libi"; String s2="libi"; (存在于字符串常量池中)
s1==s2为true,s1.equals(s2)为true
String s3=new String("libi"); String s4=new String("libi"); (新new的字符串存在于java堆中)
s3==s4为false s3.equals(s4)为true
s1==s3为false s1.equals(s3)为true
-------------------------------------------------------------------------------
当频繁操作字符串时,会额外产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。至于 StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。
----------------------------------------------------------------------------------
Java是传值还是传引用?
String s="guoyari"
String foo(Stirng s){
对字符串进行相关操作
}
当把s传递给foo()时,其实是把s(位于java虚拟机栈中)复制了一份,将s`传递给了foo()。s和s`指向的字符串常量池的内容是相同的。
public < T > void swap(T a, T b) {
T temp = a;
a = b;
b = temp;
}
定义一个交换的函数。
String stra = " Mighty " ;
String strb = " Mouse " ;
c.swap(stra, strb);
System.out.println(stra + " " + strb); //输出Mighty Mouse
public < T > void swap(T[] t) {
if (t.length < 2 ) {
System.out.println( " error! " );
return ;
}
T temp = t[ 0 ];
t[ 0 ] = t[ 1 ];
t[ 1 ] = temp;
}
也定义了一个交换函数
String[] strArr = new String[ 2 ] ;
strArr[ 0 ] = stra;
strArr[ 1 ] = strb;
c.swap(strArr);
System.out.println(strArr[ 0 ] + " " + strArr[ 1 ]);
//输出Mouse Mighty