String基础
1.String 不可变
public class Test1 {
public static String upcase(String s){
return s.toUpperCase();
}
public static void main(String[] args) {
String s="hobby";
System.out.println(s);
String ss = upcase(s);
System.out.println(ss);
}
}
当把String作为参数时,会先拷贝一份引用,引用所指向的物理地址不会改变
2. 重载”+”与StringBuilder
String对象是不可变的,具有只读特性
public static void main(String[] args) {
String mongo="mongo";
String s="a"+mongo+"c"+47;
System.out.println(s);
}
编译器自动引入了java.lang.stringBuilder,最终构建String对象
那就可以随便使用String了吗?请看下个例子
public String useString(String[] field){
String result="";
for(int i=0;i<field.length;i++){
result+=field[i];
}
return result;
}
public String useStringBuilder(String[] field){
StringBuilder sb=new StringBuilder();
for(int i=0;i<field.length;i++){
sb.append(field[i]);
}
return sb.toString();
}
从他们的字节码可知:StringBuilder效率更高
3. String 上的操作
注:当需要改变String的内容时,会返回一个新的String对象,如果内容没有改变时,返回原对象的引用
4.格式化输出
1.format方法
public static void main(String[] args) {
int a=1;
double b=3.1415976;
System.out.format("a=%d,b=%f", a,b);
}
有点类似C的printf
2.Formatter类
public class Test1 {
private String name;
private Formatter f;
public Test1(String name,Formatter f){
this.f=f;
this.name=name;
}
public void move(int x,int y){
f.format("%s The Turtle is at (%d,%d)", name,x,y);
}
public static void main(String[] args) {
Test1 t1=new Test1("netty", new Formatter(System.out));
t1.move(5, 6);
}
}
5.Formatter转换