Java 为什么使用整数和双精度?

Java 为什么使用整数和双精度?,java,integer,double,Java,Integer,Double,我有相同函数的两个版本的代码:一个迭代版本和一个递归版本。我想知道为什么返回类型是int。它能给你多少钱?为什么返回类型不能是双精度的 public static int iterative(int n){ int var=1; int var1=1; int var2=1; if (n<=1) { return 1; } for(int i=2;i<=n;i++){ var=var1+var2+1; var2=var1;

我有相同函数的两个版本的代码:一个迭代版本和一个递归版本。我想知道为什么返回类型是
int
。它能给你多少钱?为什么返回类型不能是双精度的

public static int iterative(int n){
  int var=1;
  int var1=1;
  int var2=1;

  if (n<=1) {
    return 1;
  }

  for(int i=2;i<=n;i++){
    var=var1+var2+1;
    var2=var1;
    var1=var;
  }

  return var;
}

private static int recursive(int n){
  if (n<=1){
    return 1;
  }

  return rec(n-1)+rec(n-2)+1;
}

public static void main(String[] args) {
  System.out.println(iter(10));
}
公共静态int迭代(int n){
int-var=1;
int var1=1;
int var2=1;

如果(n您当然可以定义该函数以返回一个
双精度
,同样,您也可以定义它以返回一个
字符串
。这些格式能够表示您将返回的值,没有理由这样做

  • 您正在计算的函数(修改后的斐波那契序列)是在整数集上定义的-事实上,只有正整数。它永远不会产生不能用
    int
    表示的值
  • double
    (和
    String
    )在空间和计算方面都比较昂贵
  • 返回类型强烈地指示了其他开发人员所期望的数据类型。返回只包含
    1,2,3,…
    double
    在某种程度上是误导性的

因此,如果你愿意,可以使用
double
;它会很好地工作。但问题更多的是“为什么?”而不是“为什么不?”.

您当然可以定义函数来返回一个
双精度
,就像定义函数来返回
字符串一样。这些格式能够表示您将返回的值,没有理由这样做

  • 您正在计算的函数(修改后的斐波那契序列)是在整数集上定义的-事实上,只有正整数。它永远不会产生不能用
    int
    表示的值
  • double
    (和
    String
    )在空间和计算方面都比较昂贵
  • 返回类型强烈地指示了其他开发人员所期望的数据类型。返回只包含
    1,2,3,…
    double
    在某种程度上是误导性的

因此,如果您愿意,可以使用
double
;它可以很好地工作。但问题更多的是“为什么?”而不是“为什么不?”。

猜测,因为这是作者想要的。返回类型可以是double、float或long,……为什么要这样做呢?fibonnaci的结果总是一个整数。因此不需要为double浪费内存(双64位,整数32位)如果您将
private static int
更改为
private static double
,它应该仍然可以工作-至少对于
rec
来说,任务表示L(0)=1 L(1)=1 L(n)=L(n-1)+L(n-2)当n>1时+1。我必须打印从0到30的数字。当它是双精度时会发生什么?结果看起来像1.0、2.0、3.0、5.0、8.0…猜测,因为这是作者想要的。返回类型可以是双精度、浮点型或长型…为什么呢?fibonnaci的结果总是一个整数。所以没有必要浪费时间双精度内存(双精度64位,整数32位)如果您将
private static int
更改为
private static double
它应该仍然可以工作-至少对于
rec
来说,任务表示L(0)=1 L(1)=1 L(n)=L(n-1)+L(n-2)当n>1时+1。我必须打印从0到30的数字。当它是双精度时会发生什么?结果会是1.0、2.0、3.0、5.0、8.0…@Susanne没问题,欢迎使用堆栈溢出!如果这个答案有用,请检查。@Susanne没问题,欢迎使用堆栈溢出!如果这个答案有用,请检查。