public class UnIntentionalObjectCreation {
private static Byte sumOfIntegerUptoN(Byte N) {
Byte sum = 0;
for (Byte i = 0; i < N; i++) {
sum += i;
}
System.out.println(sum);
return sum;
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
sumOfIntegerUptoN(10);
long end = System.currentTimeMillis();
System.out.println((end - start));
}
}
6行错误: - 找到不可转换的类型 14行错误: - UnIntentionalObjectCreation无法应用于(int)
答案 0 :(得分:1)
因此,当您传递Byte
时,您的方法会接受int
。
您只需将Byte
变量/方法替换为int
。
public class UnIntentionalObjectCreation {
private static int sumOfIntegerUptoN(int N) {
int sum = 0;
for (int i = 0; i < N; i++) {
sum += i;
}
System.out.println(sum);
return sum;
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
sumOfIntegerUptoN(10);
long end = System.currentTimeMillis();
System.out.println((end - start));
}
}
应该做的工作。
答案 1 :(得分:0)
Byte
是一个对象,但他的行为与Integer
,Long
和Double
不同,您不能将其用于基本算术运算。即使您可以为Byte对象分配一个整数,如下所示:
Byte a = 10;
很奇怪,你不能像调用sumOfIntegerUptoN
方法那样传递整数作为参数。
在您的情况下,我建议使用Byte
这样的原始数据类型而不是int
。
Byte
对象是不可变的,所以你不能递增和递减它。
Byte类在对象中包装基本类型byte的值。一个 类型为Byte的对象包含单个字段,其类型为byte。
您应该查看autoboxing and autounboxing in Java是什么以及primitive data type exists in java是什么。
我建议另外一个方面要注意,一个字节只有8位,所以你能处理的数字范围很小(-128 / + 127)。
答案 2 :(得分:0)
我注意到的事情很少 -
<强>一强>
sumOfIntegerUptoN(10); // this is expected to be of Type
可以修改为 -
sumOfIntegerUptoN(((Integer)10).byteValue()); // wraps the integer converted to byte into Byte
<强>两个强>
sum += i; //where both these are Byte
根据doc here不允许进行操作。由于上面表达式中的变量值在编译时是未知的。
在您的情况下,请查看Why can not I add two bytes and get an int and I can add two final bytes get a byte?
因此建议将代码中的所有Byte
次出现更改为int
并执行相应的操作。