【问题标题】:Why should I define a method as another variable for integers but not for array in java?为什么我应该将一个方法定义为整数的另一个变量而不是 java 中的数组?
【发布时间】:2016-11-20 03:53:11
【问题描述】:

以下代码:

public static void main(String[] args) {
    int first = 1;
    int second = 2;
    sum(first,second);
    System.out.println(sum);
}
public static int sum(int a, int b){
    int sum = a+b;
    return sum;
}}

会返回错误,我需要写

int x = sum(first,second);
System.out.println(sum);

并将该方法定义为整数 x 并打印 x。

但是对于数组,

public static ArrayList<String> removeLast(ArrayList<String> list) {
//code
return list;
}


public static void main(String[] args) {
    //code
    removeLast(persons);    

    System.out.println(persons);
}

将打印数组的返回值,而不像之前的那样定义为另一个数组。

很抱歉,如果我找不到该问题已被问到。而我只是在学习 Java。

【问题讨论】:

  • 试图消除混乱被否决:(

标签: java arrays methods


【解决方案1】:

数组是通过(值)引用传递的,因此,方法内数组发生的任何更改实际上都会更改传入它的数组。另一方面,整数是按值传递的。在方法中更改 int,它不会更改传递给方法的 int。

因此,您的数组方法中的 return 语句是完全没有必要的。即使您省略了 return 语句,您的代码仍会更改数组。

但还有一个误解需要指出:当你对两个整数求和时,你是在内存中创建一个新值,只要方法被执行,它就存在。当sum 方法完成时,sum int 不再存在。要保留其值,您需要从方法中返回它,并将其分配给您调用代码的变量。

【讨论】:

  • 我通过删除数组方法中的return 进行了检查,但出现错误。你能帮帮我吗?
  • 如果你有一个看起来像这样的方法:public static void removeLast(ArrayList&lt;String&gt; list) { list.remove(list.size()-1); } 并且你从 main 调用像这样:removeLast(list); 然后System.out.println(list); 你会看到你想要的效果。
【解决方案2】:

因为Java是按值传递的,但是引用类型(包括数组)的值是对Object的引用(在本例中为List)。您可以使用 variadic function 和(在 Java 8+ 中)IntStream 来实现它

public static int sum(int... arr) {
    return IntStream.of(arr).sum();
}

然后,您可以根据需要使用尽可能多(或少数)int 参数调用 sum

【讨论】:

  • 即使使用可变参数函数,您仍然需要将返回值存储在变量中。
  • System.out.println(sum(1, 2, 3));
  • 好吧,这也适用于 OP 的代码(尽管只有两个参数)。
【解决方案3】:

将打印数组的返回值而不定义为另一个 数组和前一个一样吗?

上面提到的@yeedle都是正确的,但要补充一点:

  • ArrayList 类(persons 对象的实际类型)已经覆盖了toString() 方法,因此它 可以在您调用
    System.out.println(persons);时打印数组详细信息
  • 您需要知道,对于您的对象(为您的自定义创建 像 Product、Employee 等类),你需要重写 toString() 方法(继承自 java.lang.Object)打印 像你想要的那样的值,否则只需使用 System.out.println(object); 将打印 hashcode 的 对象(如@HA5431 等)。

你可以看看herehere

【讨论】:

  • 你能详细说明一下吗?虽然它正在正确打印值。
  • 上面更新了,大家可以看看
猜你喜欢
  • 2016-12-02
  • 2020-06-22
  • 2020-11-06
  • 1970-01-01
  • 2016-04-20
相关资源
最近更新 更多