基本的Java返回值

时间:2014-10-06 08:11:39

标签: java

嘿,我真的对java中的回报感到困惑。请帮助我解决我的痛苦...提前谢谢:)

public static void main(String[] args){


    System.out.println(addThem(1,2));

}

public static int addThem(int a, int b){

    int c = a + b;

    return c;
}

我可以理解,在上面的代码中返回" c"作为添加的新变量/结果。 这是让我混淆>>

的另一种方法
public static void main(String[] args){

    int d = 5;
    tryToChange(d);

    System.out.println("tryToChange d = " + d);     
}

public static void tryToChange (int d){

    d = d + 1;
    System.out.println("tryToChange d = " + d);
}

当我尝试执行此代码时,它返回

tryToChange d = 6
tryToChange d = 5

它显示方法中的值" tryToChange"返回5 + 1的值,它也返回value。但为什么它是无效的?

6 个答案:

答案 0 :(得分:1)

在这两种方法中,变量d是方法范围变量。这意味着它仅适用于方法本身。此外,这意味着变量d实际上是两个独立的变量,每个方法一个。方法tryToChange仅更改它自己的局部变量(在签名中声明为参数),它不会更改d方法中的main变量(这是一个单独的变量)。

因此,在main中,d将获得值5,并在整个执行过程中保持此值。在tryToChange中,它会收到值5,向其添加1并打印结果(6)。返回后,d - main方法的5 - 变量将被打印(并且不会更改,因此会打印by value。)

在Java中,传递原始值(int,char等)by reference。这意味着更改此类参数不会更改方法本身之外的任何内容。另一方面,我们传递public void a() { final List<String> myList = new ArrayList<>(); b(myList); } public void b(List<String> something) { something.add("something"); //Changes myList in a(). something = new ArrayList<>(); //Does nothing to myList in a(). } ,它适用于对象(例如列表),这意味着您实际上可以修改列表本身(但不是在调用方法中保存列表的变量。)

{{1}}

答案 1 :(得分:1)

  1. tryToChange不会返回值,只会将其打印到out
  2. 基元在java中按值传递,因此第二次打印到out会打印5,这是局部变量d的值。请参阅:is-java-pass-by-reference-or-pass-by-value
  3. 你可以将int“包装”在一个类中,看看如何通过引用传递(实际上它仍然通过值传递,但引用是值)表现如下:

    class IntWrapper {
       public int d;
    
       public IntWrapper(int d) {
           this.d = d;
       }
    }
    
    public static void main(String[] args){
    
        IntWrapper wrapper = new IntWrapper(5);
        tryToChangeWrapped (wrapper); // will print 6
    
       System.out.println("tryToChange d = " + wrapper.d); // will print 6
    }
    
    public static void tryToChangeWrapped (IntWrapper wrapper){
    
        wrapper.d = wrapper.d + 1; // or wrapper.d += 1 or wrapper.d++
        System.out.println("tryToChangeWrapped d = " + wrapper.d);
    }
    

答案 2 :(得分:0)

您的tryToChange()函数未返回任何值。因此它是无效的。 很明显,你正在调用tryToChange函数来执行打印传递给它的值的任务。

答案 3 :(得分:0)

<强>首先

java中的所有原语都是按值传递,因此它只是将值传递给方法tryToChange,而tryToChange只是在递增后打印它也不会返回任何值,因为它的返回类型是void

<强>第二

main中,它只需要本地变量d并在本地打印。这就是输出的原因。

tryToChange d = 6
tryToChange d = 5

答案 4 :(得分:0)

您只需要更改代码

public static void main(String[] args) {
    int d = 5;
    System.out.println("Current value if d: " + d);
    d = tryToChange(d);// assign returning value to d 
    System.out.println("New value of d: "+d);
}

public static int tryToChange(int d) { // needs to return value from here
    d = d + 1;
    return d;
}

Out put:

Current value if d: 5
New value of d: 6

答案 5 :(得分:0)

游览两种情况都不同。首先,您需要了解return语句的使用。 “返回”语句总是返回值。

在你的第一个案例中: -

public static void main(String[] args){


    System.out.println(addThem(1,2));

}

public static int addThem(int a, int b){

    int c = a + b;

    return c;
}

您正在调用addThem()方法。添加两个值,并将总和存储到c变量中,然后接下来返回变量c。但实际上变量c没有返回,但是c变量值是(a + b)的总和。所以在这种情况下,jvm返回变量c的值而不是变量c。

在你的第二个案例中: -

public static void main(String[] args){

    int d = 5;
    tryToChange(d);

    System.out.println("tryToChange d = " + d);


}

public static void tryToChange (int d){

    d = d + 1;
    System.out.println("tryToChange d = " + d);
}

现在你正在调用tryToChange()方法。因为当这个方法被调用时,它取变量d的值而不是变量d。和tryTOChange()方法defination获取d的值。

这里d方法main()和tryTOChange()中的变量都不同。因为d变量声明为局部变量。 所以当main()方法调用tryTochange()方法时,两个d变量都具有相同的值。但是当d加1时,main方法中的d变量值为5,或者tryTOchange()因为范围不同而为6。因此,当tryToChange()中的sop print d打印6并且在main方法中它打印5.并且当tryTochange()方法在那里完成时,它不会向main方法返回任何值。为什么main方法中的变量值为5