当前位置: 首页 > 面试题库 >

为什么此Java转换会引发错误?

壤驷阳波
2023-03-14
问题内容

我想知道为什么在引用“ w”之后obj = w;会引发错误。您不是通过说obj =
w来创建另一个指向该w实例的指针吗?也就是说,为什么与说String s = "hi"; String w = s;谢谢一样呢?

public class Casting {
   public static void main(String[] args) {
      // casting doesn't change the object
      Object obj;
      { 
          Stopwatch w = new Stopwatch();
          obj = w;
      }
      System.out.println(obj); // this line does work
      System.out.println(w); //this line does not work 
   }
}

问题答案:

没有什么比早上引用JLS更重要。

JLS 6.3。宣言的范围:

块中的局部变量声明的范围(第14.4节)是该声明在其中出现的其余部分,从其自身的初始化程序开始,并在局部变量声明语句的右侧包括其他任何声明符。

JLS 14.2 方块:

是语句,局部类声明,并且括号内的局部变量声明的语句序列。

在您的情况下意味着什么?局部变量w在块中声明

{ 
    Stopwatch w = new Stopwatch();
    obj = w;
}

(“自己的初始化程序”是该块的第一行),因此它的作用域是该块的其余部分。对它的引用

System.out.println(w);

在代码块之外,因此w将无法解析为变量。

那局部变量obj呢?它在块中声明

public static void main(String[] args) {

    Object obj;
    { 
        Stopwatch w = new Stopwatch();
        obj = w;
    }
    System.out.println(obj);
    System.out.println(w);
}

在这种情况下是一个方法块。通话

System.out.println(obj);

在块内,因此obj可以成功引用。



 类似资料:
  • 问题内容: 在Java中: 抛出。为什么?为什么在这里投降?我不知道原因。 问题答案: 让我重命名您的班级,以使事情更加清楚。 -> 。 -> 。 仅仅因为你是一个人并不意味着你是一个人。你可能是一个。这就是将A强制转换为A的原因。 另一方面,每个是吗?答案是“是”。这就是为什么您 可以 编写如下代码: 要么 另外值得注意的是,您 可以 执行以下操作: 这样做的原因是您的变量实际上是在引用实例。因

  • 问题内容: 因此,我知道IEEE 754为不是实数的值指定了一些特殊的浮点值。在Java中,铸造这些值的原始不会 不 抛出异常像我本来期望。相反,我们有以下内容: 在这些情况下 不 抛出异常的理由是什么?这是IEEE标准,还是Java设计者的选择?我是否不知道有这样的强制转换是否可能导致异常后果? 问题答案: 在这些情况下不抛出异常的理由是什么? 我认为原因包括: 这些都是极端情况,在执行此类操作

  • 我正在做一个编码练习:给定一个整数序列作为一个数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。 所以我写了这段代码: 现在,这段代码似乎适用于大多数序列,但这段代码引发了一个错误: 错误如下: 我只是不明白列表索引怎么可能超出范围…有人有线索吗?

  • 根据 Spark 文档,只有 RDD 操作可以触发 Spark 作业,并且在对其调用操作时会延迟评估转换。 我看到< code>sortBy转换函数被立即应用,并在SparkUI中显示为一个作业触发器。为什么?

  • 问题内容: 我正在尝试使用DB2运行一个简单的SQL语句,并且遇到了一些问题。我想在txt / db2文件中有一个脚本,并让引擎处理所有命令 这是脚本: 当我运行db2 -f / pathtofile时,我得到: 我究竟做错了什么?我的脚本有问题吗?另外,为什么没有“;”也能正常工作 我的陈述结尾处的终止符? 谢谢, 问题答案: 可能会有帮助, http://www.uc.edu/R/r25/do

  • 问题内容: 为什么这段代码不抛出?它在不使用方法的情况下修改了一段时间,这是唯一安全的删除方法。 如果将替换为,则会得到相同的结果。但是,如果我将列表更改为或只是得到了预期的异常。到底是怎么回事?我正在使用是否相关。 编辑 我找到了以下链接 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4902078 相关部分是 天真的解决方案是将协同修改