String.valueOf()与toString()和(String)的区别

文章详细解析了Java中String.valueOf()方法在处理不同数据类型时的内部实现,特别是对于基本类型和对象的处理方式。对于Integer,文章指出在-128到127之间的值会使用缓存,避免重复创建对象,这影响了equals()和==的比较结果。
摘要由CSDN通过智能技术生成

String.valueOf()与toString()和(String)的区别

string.valueOf()

/**
String.class
*/
public static String valueOf(boolean b) {
        return b ? "true" : "false";
}
public static String valueOf(char c) {
        char data[] = {c};
        return new String(data, true);
}

//使用的都是其包装类对应的toString()
public static String valueOf(int i) {
        return Integer.toString(i);
}
public static String valueOf(long l) {
        return Long.toString(l);
}
public static String valueOf(float f) {
        return Float.toString(f);
}
public static String valueOf(double d) {
        return Double.toString(d);
}

//如果不是基本类型,其若不为空,则调用对应的toString()方法
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
}

String.ValueOf()方法内部在基本类型传入之后使用的依然是其对应的包装类的toString()方法,但特殊的如:String.valueOf(char ch)/String.valueOf(boolean b),以及String.valueOf(Object o)所使用的不是其对应包装类的toString()方法而Character的toString()方法内部使用的是String.valueOf()

Integer类的特殊

public class IntegerTest {
    public static void main(String[] args) {
        Integer a= 127, a1 = 128;
        Integer b = 127,b1 = 128;
        Integer c = Integer.valueOf(127),c1 = Integer.valueOf(128);
        Integer d = new Integer(127),d1 = new Integer(128);
        System.out.println("a==b?"+(a==b)+"\t"+"a1==b1?"+(a1==b1));
        System.out.println("a.equals(b) = " + a.equals(b)+"\t"+"a1.equal(b1) = "+a1.equals(b1));
        System.out.println("c==d = " + (c == d)+"\t"+"c1==d = "+(c1==d1));
        System.out.println("c.equals(d) = " + c.equals(d)+"\t"+"c1.equals(d1) = "+c1.equals(d1));

    }
}
a==b?true	a1==b1?false
a.equals(b) = true	a1.equal(b1) = true
c==d = false	c1==d = false
c.equals(d) = true	c1.equals(d1) = true
/**
 * 返回表示指定int值的Integer实例。如果不需要新的Integer实例,通常应该优先使用此方法而不是构造函数Integer(int),因为此方法通过缓存频繁请求的值可能会产生显著更好的空间和时间性能。此方法将始终缓存-128到127(包括-128到127)范围内的值,并可能缓存此范围之外的其他值。 参数: I -一个int值。 返回: 表示i的Integer实例。 自: 1.5
 */
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

总结: Integer a = 22其实就是调用Integer a = Integer.valueOf(22)这个方法,方法源代码如上,当传入的参数是IntegerCache.low - IntegerCache.high之间,即-128 – 127之间,返回的是缓存中提前存在的integer对象,当非-128 – 127之间的时候,则new Integer(int value)新对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值