Java 回归误解

Java 回归误解,java,return,Java,Return,我觉得不知何故我不明白使用“返回”值的意义,所以我会给你们两个例子,也许有人会帮我澄清。 这种方法的区别是什么: int giveSecret(){ return 42; } //code in between int theSecret = life.giveSecret(); System.out.println(theSecret); void giveSecret(){ //code that "resets" variable to value 42 } //code in betw

我觉得不知何故我不明白使用“返回”值的意义,所以我会给你们两个例子,也许有人会帮我澄清。 这种方法的区别是什么:

int giveSecret(){
return 42;
}
//code in between
int theSecret = life.giveSecret();
System.out.println(theSecret);
void giveSecret(){
//code that "resets" variable to value 42
}
//code in between
int theSecret = life.giveSecret();
System.out.println(theSecret);
(我预期的控制台输出): 42

这种方法:

int giveSecret(){
return 42;
}
//code in between
int theSecret = life.giveSecret();
System.out.println(theSecret);
void giveSecret(){
//code that "resets" variable to value 42
}
//code in between
int theSecret = life.giveSecret();
System.out.println(theSecret);
(我预期的控制台输出):
42

当然,语言可以像后一个例子那样工作。每个函数都可以有一个全局变量,该变量与存储“结果”的位置相关联。您可以调用该函数,然后从全局变量读取结果。然而:

  • 真恶心。为什么需要另一个全局名称?为什么一定要知道哪个变量与哪个函数相关

  • 它不是线程安全的。多个线程可能同时调用该函数。现在,全局变量中存在哪个线程的结果


  • 语言设计师很久以前就发现了这一点,但它一直存在。

    第二个代码段没有通过编译,因为
    life.giveSecret()
    没有返回任何内容。为什么你认为总是有一个变量可以在
    giveSecret
    这样的方法中进行操作?你应该先尝试一下。您将看到int theSecret=life.giveSecret()将无法编译,因为int!=无效。
    //将变量“重置”为值42的代码。。。什么变量?正如所指出的,如果你有
    void giveSecret()
    ,那么尝试
    int theSecret=life.giveSecret()
    那么这是一个错误,因为
    giveSecret()
    return被声明为
    void
    ,但您试图将其赋值,就好像它有
    int
    返回值一样。您需要一个
    return
    语句(带有类型与您声明的返回值相匹配的参数)来告诉解释器/编译器向调用者返回值。没有它,就不会有回报。问题是,它是复杂还是复杂?非常不清楚。请记住,返回值远不止返回预定义的常量。通常,返回的值是针对给定给函数的特定输入计算的。函数表示数据的转换或使用;
    返回
    返回结果数据。你过于简化的例子没有抓住要点。谢谢,这是建设性的!我正处于学习Java的初级阶段,我偶然发现了这个还并没有很好解释的示例,并试图给它一种感觉。希望在后面的章节中我能充分理解“回归”的意义。