【问题标题】:Return misconception退货误解
【发布时间】:2018-01-01 16:17:43
【问题描述】:

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

int giveSecret(){
return 42;
}
//code in between
int theSecret = life.giveSecret();
System.out.println(theSecret);

(我预期的控制台输出): 42

还有这个方法:

void giveSecret(){
//code that "resets" variable to value 42
}
//code in between
int theSecret = life.giveSecret();
System.out.println(theSecret);

(我预期的控制台输出): 42

【问题讨论】:

  • 第二个 sn-p 没有通过编译,因为life.giveSecret() 什么都不返回。
  • 为什么总有一个变量可以用giveSecret这样的方法来操作?
  • 你应该先试试这个。你会看到 int theSecret = life.giveSecret() 不会编译,因为 int != void。
  • //code that "resets" variable to value 42...什么变量?正如所指出的,如果你有void giveSecret(),然后尝试int theSecret = life.giveSecret();,那么这是一个错误,因为giveSecret() return 被声明为void,但你试图分配它,就好像它有一个int 返回值一样。您需要一个return 语句(其参数的类型与您声明的返回值相匹配)来告诉解释器/编译器将一个值返回给调用者。没有它,什么都不会返回。问题,是复杂还是?非常不清楚。
  • 请记住,返回值不仅仅是返回预定义的常量。通常,返回的值是针对给定函数的特定输入计算的。函数代表数据的转换或使用; return 返回结果数据。您过于简化的示例没有抓住重点。

标签: java return


【解决方案1】:

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

  1. 真恶心。为什么需要另一个全局名称?为什么必须以某种方式知道哪个变量与哪个函数相关联?

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

语言设计者很久以前就想出了这个东西,并且一直坚持下去。

【讨论】:

  • 谢谢,很有建设性!我正处于学习 Java 的初级阶段,我偶然发现了这个还没有很好解释的例子,并试图给它一个意义。希望在后面的章节中我能完全理解“回归”的意义。
猜你喜欢
  • 2018-05-02
  • 2018-06-26
  • 1970-01-01
  • 2015-06-07
  • 2020-09-15
  • 2020-11-20
  • 2019-01-14
  • 2012-12-08
相关资源
最近更新 更多