Java中String使用总结(1)

来源:互联网 发布:js定时器重复执行 编辑:程序博客网 时间:2024/05/16 10:30

Java中的String是不可变类,意味着每次对String的操作得到的都是一个从全新的对象。在项目中对多个字符串进行操作,使用StringBuilder,如果涉及到线程安全则用StringBuffer。在String的使用过程中还有一些需要注意的地方。
1. 避免递归调用
如果要打印一个对象的内存地址,因为this代表的是当前对象,我们可能会这么写

@Override    public String toString() {        return "C{" +                "name='" + name + '\'' +this+                '}';    }

但是在调用该对象的toString()方法的时候会出现如下的错误:

Exception in thread "main" java.lang.StackOverflowError    at java.lang.AbstractStringBuilder.appendNull(AbstractStringBuilder.java:493)    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:446)    at java.lang.StringBuilder.append(StringBuilder.java:136)    at javatest4.C.toString(C.java:21)    at java.lang.String.valueOf(String.java:2994)    at java.lang.StringBuilder.append(StringBuilder.java:131)    at javatest4.C.toString(C.java:21)    at java.lang.String.valueOf(String.java:2994)    at java.lang.StringBuilder.append(StringBuilder.java:131)    at javatest4.C.toString(C.java:21)    at java.lang.String.valueOf(String.java:2994)    at java.lang.StringBuilder.append(StringBuilder.java:131)    at javatest4.C.toString(C.java:21)    at java.lang.String.valueOf(String.java:2994)    at java.lang.StringBuilder.append(StringBuilder.java:131)

这是因为出现了递归调用,当编译器遇到this时,它会去找当前对象的toString()方法,但在toString方法中又有this,就会出现循环引用的情况。如果想要打印内存地址,将this改成super.toString()即可。
2. 使用format格式化输出
在开发中,我们经常需要打印一些信息到日志文件或控制台中。可以使用String.format()或是printf方法来格式化输出。

public static void main(String[] args) {        C c = new C();        System.out.printf("[output Str:%s]\n", c.printStr("hello world"));        System.out.println(String.format("[output Str:%s]", c.printStr("hello world")));    }

输出的结果:
[output Str:HELLO WORLD]
[output Str:HELLO WORLD]

常用的类型转换字符

名称 代表类型 s 字符串 d 整数(十进制) f 浮点型(十进制) c unicode字符 b Boolean型 e 浮点型 x 整数(十六进制) % 字符“%”
原创粉丝点击