byte长度

来源:百度知道 编辑:UC知道 时间:2024/05/25 04:48:38
Byte b1 = new Byte("10");
b1.toString() == b1.toString() 这个打印一下是true

Byte b1 = new Byte("11");
b1.toString() == b1.toString() 这个打印一下是false了

为什么呢?
难道是11超过了byte类型的长度?
为什么不能? 有的说是1111超过了byte类型的长度 在tostring 的时候就new 了2个新的string 所以显示的结果就是false 如果用.equals 就是对的~
谢谢 dakiler的回答 但是 为什么Byte b1 = new Byte("10");
b1.toString() == b1.toString() 这个打印一下是true 呢?

JDK 1.4的 答案 一个是true 一个是FALSE 1.6的答案 都是false

不是这样子的
java里面 == 是判断两个对象是否完全相同,而不是内容; equals()是判断内容是否相同。
b1.toString()这个方法每次都创建一个对象,两次创建了两个对象
所以调用 == 的话,返回false

答复补充:
我在1.6 1.4运行,都是false,不是true
还有刚才我看了下Byte类的源代码,大概是这样的:
public String toString() {
return String.valueOf((int)value);
}

然后在String类中:
public static String valueOf(int i) {
return Integer.toString(i, 10);
}
这里的10是基数

最后在Integer类中:
toString(i,10)最后会调用下面这个方法:
private static String toUnsignedString(int i, int shift) {
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask];
i >>>= shift;
} while (i != 0);

return new String(buf, charPos, (32 - charPos));
}

所以感觉应该是每次创建一个对象

你用toString应该不能说明任何问题
byte类型的范围应该是-128-127
这个应该没有问题。。

tostring在比较值是否相同时,同时还要比较两个的地址