Java误认为原始数据类型?

时间:2012-05-11 23:43:30

标签: java types primitive

问题:我无法存储号码'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;
}

}

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

更多信息: Java's L number (long) specification

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

在这个字面值中放一个小'L':

 600851475143L

原因是:

如果整数文字以字母L或l结尾,则其长度为long;否则它是int类型。建议您使用大写字母L,因为小写字母l很难与数字1区分开来。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

您也可以使用此表示法,以便更清楚:

 600_851_475_143L

答案 2 :(得分:4)

  

“我的程序没有将变量”number“注册为long,它是   将其注册为int“。

这不正确。你宣称它很长。这是一个漫长的过程。

你必须得到的是完全不同的东西:常量600851475143上的编译错误。尝试600851475143L。我建议如果你仔细阅读编译器错误信息,你会看到它。