使用不同的数据类型

时间:2017-03-02 15:28:42

标签: java

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)

3 个答案:

答案 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是一个对象,但他的行为与IntegerLongDouble不同,您不能将其用于基本算术运算。即使您可以为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并执行相应的操作。