String2


1、重载"+"

重载操作符:操作符在用于特定的类的时候,被赋予特殊的意思。String的+,+=是java中仅有的重载操作符,java不允许程序员重载操作符。


2、String,StringBuffer,StringBuilder

String是定长的,是不可变对象,每次对String对象进行改变长度的操作实际都是生成了新的对象。对StringBuilder与StringBuffer对象的操作都是针对其自身,在字符串对象会经常改变的情况下使用这两个比较好。StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder要快一些。StringBuilder是javaSE5引入的。


●以下代码对于String的实际操作是生成了新的对象。

●对于“+”,se5以前是对于String创建三个对象,se5以后jvm进行了优化,编译器调用了StringBuilder。

代码段:

public static void main(String[] args){

String mango="mango";

String s="abc"+mango+""def"+47;

}


如果是为一个类编写toString(),字符串操作比较简单就可以依赖编译器。如果在toString()方法中使用了循环,那么最好自己创建StringBuilder对象来构造最终的结果。


●packagestringBuilderTest;

importjava.util.Random;

/**

* Created by wanchuang on 2015/11/28.

*/

public classStringBuilderTest {

public staticRandomrandom=newRandom(47);

@Override

publicString toString()

{

StringBuilder result=newStringBuilder("[");

for(inti=0;i<25;i++  ){

result.append(random.nextInt(100));

result.append(", ");

}

result.delete(result.length() -2, result.length());

result.append("]");

returnresult.toString();

}

public static voidmain(String[] args) {

StringBuilderTest stringBuilderTest=newStringBuilderTest();

System.out.println(stringBuilderTest);

}

}

//结果:[58, 55, 93, 61, 61, 29, 68, 0, 22, 7, 88, 28, 51, 89, 9, 78, 98, 61, 20, 58, 16, 40, 11, 22, 4]


容器类都有覆写toString()方法,例如ArrayList().toString()方法遍历ArrayList所有对象,调用每个元素的toString()方法。

3、格式化输出

格式修饰符:

printf("Row 1: [%d %f]\n",x,y);

不仅仅说明了插入数据的位置,还说明了变量类型。%d表示x是一个整数,%f表示y是浮点数。

javaSE5引入的format方法实际等价于printf方法。format方法作用于PrintStream,PrintWrite方法。

java中所有格式化的功能由java.util.Formatter类处理,Formatter一个翻译器,把格式化字符串和数据翻译。创建Formatter对象的时候,向构造器传递一些信息,告诉最终结果输出到哪里。


●public classStringFormat294 {

public static voidmain(String[] args) {

String s="wan";

inta=1,b=2;

System.out.println(String.format("(t%d,q%d) %s",a,b,s));

}

}//(t1,q2) wan


packagethinkingInJava13String;

importjava.io.PrintStream;

importjava.util.Formatter;

/**

* Created by wanchuang on 2015/11/28.

*/

public classFormatter290 {

privateStringname;

privateFormatterformatter;

publicFormatter290(String name,Formatter formatter){

this.name=name;

this.formatter=formatter;

}

public voidmove(intx,inty){

formatter.format("%s The location is at (%d,%d)\n",name,x,y);

}

public static voidmain(String[] args) {

PrintStream outAlias=System.out;

Formatter290 f1=newFormatter290("f1",newFormatter(System.out));

Formatter290 f2=newFormatter290("f2",newFormatter(outAlias));

f1.move(0,0);

f2.move(4,8);

}

}

//输出:f1 The location is at (0,0)      f2 The location is at (4,8)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值