Java误认为原始数据类型?

use*_*463 1 java primitive types

问题:我无法存储号码'600851475143'.我意识到这个数字比int可以容纳的数字大,并且小于最大长值.但是,我的程序没有将变量"number"注册为long,而是将其注册为int.有人能解释一下这个问题吗?

** - 问题的界限

public class Problem3{
//What is the largest prime factor of the number 600851475143
public static void main(String[] args){
  ***long number = 600851475143 , total = 0;
    for(long x = (number-1)/2; x>1; x--)
      if(number%x == 0 && isPrime(x)) total += x;
    System.out.println(total);
}
private static boolean isPrime(long determine){
  for(long x = determine/2 - 1; x>1; x--)
    if(determine%x ==0) return false;
  return true;
}
Run Code Online (Sandbox Code Playgroud)

}

解决方案:正如Jim在下面所说,为了类型为long,必须在数字的末尾加上"L"或"l"."如果整数字面以字母L或l结尾,则为long类型;否则为int类型.建议您使用大写字母L,因为小写字母l很难与数字1区分开来". - 从Oracle网站上的原始类型.

更多信息: Java的L号(长)规范

Jim*_*son 12

长文字需要用尾随的"L"表示,如 600851475143L