Java中String使用总结(1)

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浮点型(十进制)
cunicode字符
bBoolean型
e浮点型
x整数(十六进制)
%字符“%”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值