【问题标题】:Why doesn't java store large value in long datatype directly but allows to store it indirectly (without using literals)? [duplicate]为什么 java 不直接在 long 数据类型中存储大值,而是允许间接存储它(不使用文字)? [复制]
【发布时间】:2018-07-06 09:15:36
【问题描述】:

这是我的两个例子:
1. 长数据类型直接赋值:

long a = 12243221112432;

我收到一个错误:

整数太大

  1. 但是当这样分配时:

    ArrayList<Integer> al = new ArrayList<Integer>();
    al.add(12); 
    al.add(24);
    al.add(32);
    al.add(21);
    al.add(11);
    al.add(24);
    al.add(32);
    
    long a=0;
    
    for(int i=0; i<al.size(); i++){
        a = a*100 + al.get(i);
    }
    System.out.println(a);
    

    我得到这个输出:

    12243221112432

为什么 java 在第二个示例中不抛出错误?
它不允许直接分配大值(示例 1)但间接分配(示例 2)它存储它并且还允许我使用它!

发生这种情况的原因是什么?
是因为我在 arraylist 中使用整数还是其他什么?

更新
为什么在第二个示例中将大值存储在“long a”中而不使用文字 L? 它应该在 for 循环的第 5 次或第 6 次迭代中给我一个错误...

注意
我的问题不是关于第一个例子......我问为什么它适用于第二个例子...... 不要将问题标记为重复,因为其他问题没有我的答案..如上所述

【问题讨论】:

  • 这是因为12243221112432 被编译器解释为int。使用12243221112432L
  • 因为 long 和 Integer 是不同的东西。 'long' 是一个原始类型,'Integer' 是一个对象,具有不同的存储使用情况
  • @jr593 绝对错误。这与 int vs Integer 或 long vs Long 无关。这只是关于一个数字文字没有其中的字母 l/L ... 与 int 文字一样,而不是那么长。这意味着“太大”的数字会给您带来错误。
  • 并提示:首先将错误消息放入您最喜欢的搜索引擎始终是一种好习惯。请放心:大多数您梦寐以求的问题,其他新手都曾遇到过,因此有很多解决方案可供您使用。在花 15 分钟写一个(写得很好!)问题之前......做一些研究。
  • 一点也不。 12243221112432 是一个有效的 long 数字。但是当你用文字表达它时,它需要 L 字符。 compute 得到 12243221112432 的 long 是完全可以的。唯一的问题是数字文字默认为 int 类型。当然,当你使用一个对于 int 类型来说太大的数字时,你就会遇到问题。

标签: java


【解决方案1】:

为了让你的作业生效,你需要这样写

long a = 12243221112432L;

这将指示编译器您的输入是长整数,而不是整数

【讨论】:

  • 最佳做法是使用大写的L,因为l 很容易与1 混淆。
【解决方案2】:

整数太大

正如错误所说,数字12243221112432对于整数来说太大了,它并没有说这个数字不能放入long

要想拥有这个号码,您必须使用l or L indice 将其设为long12243221112432L

long   : l L : 1716L
float  : f F : 3.69F
double : d D : 6936D

【讨论】:

  • 作为风格问题,请使用L 以避免与1 混淆。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多