代码之家  ›  专栏  ›  技术社区  ›  Mr Guliarte

Java:为什么“long”原始类型不接受简单的数字?

  •  6
  • Mr Guliarte  · 技术社区  · 10 年前

    我有一个方法可以接收 long 键入parameher,我尝试将其称为传递 1 :

    contato.setId(1);
    

    我收到了这个:

    The method setId(Long) in the type Contato is not applicable for the arguments (int).
    

    但是,不是 1. 一个很长的数字?是不是在长 范围 ??

    PS:只是说,我用这个代码解决了问题:

    Integer y = 1;
    long x = y.longValue();
    contato.setId(x);
    

    这只是一个说教式的问题。

    4 回复  |  直到 10 年前
        1
  •  7
  •   rmuller    10 年前

    你应该使用 contato.setId(1L); (注意“L”后缀)

    文字“1”表示原语 int 值,该值被强制转换为 java.lang.Integer 包装器类。

        2
  •  6
  •   Ky -    9 年前

    long 是包含64位的数据类型(不要与Object混淆 Long !) 对int(32位),因此不能使用 int 长的 。请参见: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

    为了了解如何声明各种数据类型,您应该特别检查 following table :

    Datatype    Default Value
    byte        0
    short       0
    int         0
    long        0L
    float       0.0f
    double      0.0d
    char        '\u0000'
    Object      null
    boolean     false
    

    所以,就你的情况而言, 长的 应使用数字后跟 L 例如:

    long x = 100L;
    

    此外,做你正在做的事情 autoboxing :

    Integer y = 1;
    long x = y.longValue();
    

    不仅没有必要,而且非常浪费。因此,例如,如果你在一个循环中(多次)这样做,你的代码将在数量级上变慢!

        3
  •  2
  •   M A    10 年前

    Long 不是原始类型, long 当使用包装类而不是基元类型时,需要向编译器显式指示传递的参数是 长的 通过添加 L 后缀:

    contato.setId(1L);
    

    或者您可以简单地更改 setId 方法,以便它采用一个原语 长的 参数。

        4
  •  0
  •   Ky -    9 年前

    setId 大写L Long ,这是Java对lowercase-l的包装 long (AKA 64位整数)。因此,Java很容易知道如何转换 长的 长的 没有你做什么特别的事。所以,正如其他答案所说,你可以简单地 setId(1L) ,这给了它一个 长的 ,它很容易将其转换为 长的 .

    但是,如果必须使用32位 int ,必须首先将其转换为 长的 长的 ,所以Java知道如何处理它。您知道,Java不知道如何隐式转换小写字母-i 整数 至上部箱L 长的 ,只有一个大写字母I Integer (包装器类 整数 ).

    因此,假设int的名称为 i ,您也可以使用这些:

    setId((long)i);         // Cast your int to a long, which Java can turn into a Long
    setId((Long)(long)i);   // Cast your int to a long, then that long to a Long
    setId(new Long(i));     // Create a new Long object based on your int
    setId(Long.valueOf(i)); // Get the Long version of your int