String对象是不可变的。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的对象,以包含修改后的字符串。而最初的String对象则丝毫未动。
import java.util.*; public class Immutable{ public static String upcase(String s){ return s.toUpperCase(); } public static void main(String[] args){ String q="helloworld"; System.out.println(q); String qq=upcase(q); System.out.println(qq); System.out.println(q); } }
其实,每当String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。
不可变性会带来一定的效率问题。为String对象重载+操作符就是一个例子。重载的意思是:一个操作符应用于特定的类时,被赋予了特殊的意义。用于String的+,+=是Java中仅有的两个重载过的操作符,而Java并不允许程序员重载任何操作符。
import java.util.*; public class Concatenation{ public static void main(String[] args){ String mango="mango"; String s=mango+"abc"+"xyz"+47; System.out.println(s); } }
String上的操作
length():String中字符的个数
charAt():取得String上该索引位置上的char
toCharArray():生成一个char[],包含所有的String字符
equals()/equalsIgnoreCase():比较两个String的内容是否相同
compareTo():按字典顺序比较字符串String的内容,比较结果为负数,零或者正数
contains():如果String对象包含参数内容,则返回true
startsWith():返回boolean结果,表明String是否以此参数起始
endsWith():返回boolean结果,表明String是否以此参数结尾
indexOf()/lastIndexOf():如果String对象并不包含此参数,就返回-1,否则返回此参数在String中的起始索引。
lastIndexOf()是从后往前搜索的。
substring():返回一个新的String,以包含参数指定的子字符串
concat():返回一个新的String,内容为原始String连接上参数String
replace():返回替换字符后的新String对象
toLowerCase()/toUpperCase():将字符串的大小写改变后,返回一个新String对象
trim():将String对象的两端空白字符删除后,返回一个新的String对象
valueOf():返回一个表示参数内容的String
String格式化输出
System.out.printf(),System.out.format()使得控制输出的代码更加简单。
import java.util.*; public class Receipt{ private double total=0; private Formatter f=new Formatter(System.out); public void printTitle(){ f.format("%-15s %5s %10s\n","Item","Qty","Price"); f.format("%-15s %5s %10s\n","----","---","-----"); } public void print(String name,int qty,double price){ f.format("%-15.15s %5d %10.2f\n",name,qty,price); total+=price; } public void printTotal(){ f.format("%-15s %5s %10.2f\n","Tax","",total*0.06); f.format("%-15s %5s %10s\n","","","-----"); f.format("%-15s %5s %10.2f\n","Total","",total*1.06); } public static void main(String[] args){ Receipt receipt=new Receipt(); receipt.printTitle(); receipt.print("afafaa",4,4.25); receipt.print("ryturty",3,5.1); receipt.print("hgjd",1,14.29); receipt.printTotal(); } }
原文地址:http://blog.csdn.net/cstopcoder/article/details/41421533