如何在 Long 方法中 return 添加 a 和 b 的结果?
How do I return the result from the addition of a and b, in a Long method?
我正在为学校做作业,但我猜我在包装器转换方面遇到了问题。我需要 return 添加变量 a 和 b 的结果,在带有 header 的长方法中,如下所示:
public Long addIntegers(Integer a, Integer b) {
…your code here…
}
老实说,在这一点上我已经尝试了至少几个小时的不同事情。我在网上看了看,但我仍然很迷茫。我想我要么不理解这个问题,要么我试图以错误的方式去做。
public class Wrapper {
public Integer x;
public Integer y;
public static void main(String[] args) {
Wrapper aWrapper = new Wrapper();
aWrapper.addIntegers(2, 5);
}
public Long addIntegers(Integer a, Integer b) {
Integer sum = a + b;
return sum;
}
}
我希望它能工作,因为我认为创建和 Integer 变量将能够添加两个 int 变量,但我错了。我尝试了很多其他方法,最常见的错误是我无法将 "x" 转换为 Long。在上面的例子中,错误说它不能从 Integer 转换为 Long。
这是最简单的方法:
public Long addIntegers(Integer a, Integer b) {
return (long)a+b;
}
这是怎么回事?
a
和 b
在 a+b
中隐式转换为 int
。因为 a+b
的结果可能大于 int
的最大值(int=32 位,long=64 位),所以我们必须明确地将结果转换为 long
。当我们 return a long
它被隐式转换为 Long
因为方法 return type.
您需要将总和转换为 long
为:
(int
+ int
) = int
转换为 long
public Long addIntegers(Integer a, Integer b) {
return (long) (a + b);
}
(int
转换为 long
) + int
=
long
public Long addIntegers(Integer a, Integer b) {
return (long) a + b;
}
还有:
- 看来你不需要
attributs
- 你需要一个局部变量来保存求和的结果
class Wrapper {
public static void main(String[] args) {
Wrapper aWrapper = new Wrapper();
Long res = aWrapper.addIntegers(2, 5);
}
public Long addIntegers(Integer a, Integer b) {
return (long) a + b;
}
}
由于a
和b
属于Integer
类型,因此您可以调用longValue
方法来检索它们,并将它们相加并return不需要任何显式转换的 long 值。
public static Long addIntegers(Integer a, Integer b) {
return a.longValue() + b.longValue();
}
请注意,由于我们要添加两个长值,我们还要确保它不会 运行 存在整数溢出的任何风险,因为添加两个大整数可能 运行 到其中。
试试这个例子
public class Main
{
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.addInteger(5, 5));
}
public Long addInteger(Integer a, Integer b) {
Integer sum = a + b;
return sum.longValue();
}
}
public Long addIntegers(Integer a, Integer b) {
Integer sum = a + b;
return sum;
}
你几乎是对的。我明白为什么您会认为它会起作用,但是您不能隐式或通过强制转换从 Integer -> Long
开始。你需要去 Integer -> int -> long -> Long
,而 Java 只能隐式跳 1 次 .
首先让我们看看a + b
实际上在做什么。它将 a
和 b
从 Integer
拆箱到原始 int
,并将两者相加,得到 int
。然后它会自动将其装箱到 Integer
因为那是您定义的变量 sum
的类型。
但是等一下,我们可以看到上面的 (Integer -> int -> long -> Long
) Integer
实际上离我们想去的地方更远,而不是更近!
那么让我们回到 a + b
,其中 returns 和 int
。我们想要 Long
。我们可以将结果转换为 long
:
public Long addIntegers(Integer a, Integer b) {
return (long) (a + b);
}
在这种情况下,我们有一个 int
- 我们的求和表达式的结果 - 我们明确地转换为 long
,并且 Java 采取最后的隐式步骤并且将其自动装箱为 Long
.
然而,虽然转换在我们的案例中很好,但它通常是糟糕设计的标志,因此我尽量避免使用它。幸运的是,在我们的例子中,我们可以避免转换。我们只需要切换隐式步骤和显式步骤(即从 int -> long
隐式转换并从 long -> Long
显式转换)
public Long addIntegers(Integer a, Integer b) {
return Long.valueOf(a + b);
}
在这个例子中,Long.valueOf
接受一个原始的long
和returns一个Long
但是我们的a + b
计算returns一个int,所以 Java 隐式地将 int
转换为 long
.
我正在为学校做作业,但我猜我在包装器转换方面遇到了问题。我需要 return 添加变量 a 和 b 的结果,在带有 header 的长方法中,如下所示:
public Long addIntegers(Integer a, Integer b) {
…your code here…
}
老实说,在这一点上我已经尝试了至少几个小时的不同事情。我在网上看了看,但我仍然很迷茫。我想我要么不理解这个问题,要么我试图以错误的方式去做。
public class Wrapper {
public Integer x;
public Integer y;
public static void main(String[] args) {
Wrapper aWrapper = new Wrapper();
aWrapper.addIntegers(2, 5);
}
public Long addIntegers(Integer a, Integer b) {
Integer sum = a + b;
return sum;
}
}
我希望它能工作,因为我认为创建和 Integer 变量将能够添加两个 int 变量,但我错了。我尝试了很多其他方法,最常见的错误是我无法将 "x" 转换为 Long。在上面的例子中,错误说它不能从 Integer 转换为 Long。
这是最简单的方法:
public Long addIntegers(Integer a, Integer b) {
return (long)a+b;
}
这是怎么回事?
a
和 b
在 a+b
中隐式转换为 int
。因为 a+b
的结果可能大于 int
的最大值(int=32 位,long=64 位),所以我们必须明确地将结果转换为 long
。当我们 return a long
它被隐式转换为 Long
因为方法 return type.
您需要将总和转换为 long
为:
(
int
+int
) =int
转换为long
public Long addIntegers(Integer a, Integer b) { return (long) (a + b); }
(
int
转换为long
) +int
=
long
public Long addIntegers(Integer a, Integer b) { return (long) a + b; }
还有:
- 看来你不需要
attributs
- 你需要一个局部变量来保存求和的结果
class Wrapper {
public static void main(String[] args) {
Wrapper aWrapper = new Wrapper();
Long res = aWrapper.addIntegers(2, 5);
}
public Long addIntegers(Integer a, Integer b) {
return (long) a + b;
}
}
由于a
和b
属于Integer
类型,因此您可以调用longValue
方法来检索它们,并将它们相加并return不需要任何显式转换的 long 值。
public static Long addIntegers(Integer a, Integer b) {
return a.longValue() + b.longValue();
}
请注意,由于我们要添加两个长值,我们还要确保它不会 运行 存在整数溢出的任何风险,因为添加两个大整数可能 运行 到其中。
试试这个例子
public class Main
{
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.addInteger(5, 5));
}
public Long addInteger(Integer a, Integer b) {
Integer sum = a + b;
return sum.longValue();
}
}
public Long addIntegers(Integer a, Integer b) { Integer sum = a + b; return sum; }
你几乎是对的。我明白为什么您会认为它会起作用,但是您不能隐式或通过强制转换从 Integer -> Long
开始。你需要去 Integer -> int -> long -> Long
,而 Java 只能隐式跳 1 次 .
首先让我们看看a + b
实际上在做什么。它将 a
和 b
从 Integer
拆箱到原始 int
,并将两者相加,得到 int
。然后它会自动将其装箱到 Integer
因为那是您定义的变量 sum
的类型。
但是等一下,我们可以看到上面的 (Integer -> int -> long -> Long
) Integer
实际上离我们想去的地方更远,而不是更近!
那么让我们回到 a + b
,其中 returns 和 int
。我们想要 Long
。我们可以将结果转换为 long
:
public Long addIntegers(Integer a, Integer b) {
return (long) (a + b);
}
在这种情况下,我们有一个 int
- 我们的求和表达式的结果 - 我们明确地转换为 long
,并且 Java 采取最后的隐式步骤并且将其自动装箱为 Long
.
然而,虽然转换在我们的案例中很好,但它通常是糟糕设计的标志,因此我尽量避免使用它。幸运的是,在我们的例子中,我们可以避免转换。我们只需要切换隐式步骤和显式步骤(即从 int -> long
隐式转换并从 long -> Long
显式转换)
public Long addIntegers(Integer a, Integer b) {
return Long.valueOf(a + b);
}
在这个例子中,Long.valueOf
接受一个原始的long
和returns一个Long
但是我们的a + b
计算returns一个int,所以 Java 隐式地将 int
转换为 long
.