繁体   English   中英

使用不同的数据类型

[英]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是一个对象,但其行为不同于IntegerLongDouble ,您不能将其用于基本算术运算。 即使您可以像这样为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM