java - 从 long 到 int 的可能有损转换

标签 java exception

我在这一行中收到“不兼容的类型:可能会丢失从 long 到 int 的转换”异常: boolean arr[] = new boolean [limit];我不明白为什么会发生这种情况,因为我将输入值存储为 long,它是如何转换为 int 的?

 import java.util.*;
 import java.io.*;
 public class PrimeSieve
{
public static void main (String args [])
{
   //getting the number
   Scanner x = new Scanner (System.in);
   System.out.println("What is your number?");
   long limit = x.nextLong();
   long count = 0;

   //making all the numbers upto the given number prime
   boolean arr[] = new boolean [limit]; 
   for ( long i = 2; i <=Math.sqrt(limit); i++) 
   {
       arr[i] = true;
   }

最佳答案

这是因为您使用 long 作为数组的大小。

Java 支持数组达到一定限制,该限制约为 Integer.MAX_VALUE - x(请参阅 this),因此不允许使用 long 来指定大小。

引自JLS:

Arrays must be indexed by int values... An attempt to access an array component with a long index value results in a compile-time error.

关于java - 从 long 到 int 的可能有损转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144675/

相关文章:

java - 克隆 HashSet 时如何避免未经检查的强制转换警告?

java - Linux 中 SOAP 请求的请求 xml 中的 UTF-8 编码

javascript - Firefox 47 中的 "pause on exceptions"在哪里?

exception - 在 D 中打开一个文件

javascript - 无法从故障异常中获取信息(javascript)

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

c++ - 为什么使用异常而不是返回错误代码

java - 并行四任务执行

java - 当可以通过重写 writeObject() 和 readObject() 进行自定义序列化时,java 外部化有什么用?

java - 使用 netbeans 7.1 自动开发 osgi 包