[英]Using Different Data types
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)
因此,当您传递int
,您的方法接受Byte
。 您可以简单地用int
替换Byte
变量/方法。
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));
}
}
应该做的工作。
Byte
是一个对象,但其行为不同于Integer
, Long
和Double
,您不能将其用于基本算术运算。 即使您可以像这样为Byte对象分配一个整数:
Byte a = 10;
奇怪的是,您不能像调用sumOfIntegerUptoN
方法那样将整数作为参数传递。
在您的情况下,我建议使用诸如int
类的原始数据类型代替Byte
。
Byte
对象是不可变的,因此您不能对其进行递增和递减。
Byte类将原始类型byte的值包装在对象中。 字节类型的对象包含一个类型为字节的字段。
您应该了解一下Java中的自动装箱和自动装箱以及Java中 存在哪种原始数据类型 。
我还建议您注意另一个方面,一个字节只有8位,因此您可以处理的数字范围很小(-128 / + 127)。
我几乎没有注意到-
一
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
根据此处的文档,不允许进行该操作。 由于上述表达式中变量的值在编译时未知。
碰巧在您的情况下,请看看为什么我不能添加两个字节并获取一个int值,而我可以添加两个最后字节获取一个字节?
因此,建议将代码中所有出现的Byte
更改为int
并相应地执行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.