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

使用方法后的Java结果与预期不符

仰成天
2023-03-14
问题内容

我有以下代码片段:

class Phone {
    String phoneNumber = "123456789";
    void setNumber () {
        String phoneNumber;
        phoneNumber = "987654321";
    }
}
class TestPhone {
    public static void main(String[] args) {
        Phone p1 = new Phone();
        p1.setNumber();
        System.out.println (p1.phoneNumber);
    }
}

我期望结果为“ 987654321”,但是我得到“ 123456789”,就像方法setNumber没有任何效果,任何人都可以帮助我理解


问题答案:

您在方法内重新声明phoneNumber变量,使类中的字段处于阴影中,因此对局部变量所做的任何更改都不会在带阴影的类字段中显示。不要这样
摆脱重复变量声明,以便在字段中看到在方法内所做的更改。

例如,更改此:

void setNumber () {
    String phoneNumber; // *** this is a local variable, visible ONLY in the method!
    phoneNumber = "987654321";  // this has no effect on the field
}

对此:

void setNumber () {
    // String phoneNumber;
    phoneNumber = "987654321"; // this will change the field!
}


 类似资料:
  • 我想mock接受对象参数的方法。此对象参数是从动态创建的。不会返回预期的结果,尽管这两个对象具有相同的数据,但只是不同的哈希代码。 有没有什么方法来模拟方法,使它能够以预期的结果响应?

  • 问题内容: 我是新手。 我在下面编写了程序,以允许用户输入名称。 我运行了程序并输入了 尼克松的* 名字 * 为什么总是输出? 问题答案: func(* Reader)ReadString ReadString读取直到输入中第一次出现delim为止,并返回一个字符串,其中包含直到定界符(包括定界符)的数据。 终端输入包括尾随换行符。例如, 输出(Linux): 输出(Windows): 修剪尾随换

  • 我有一个与mockMvc一起工作的JUnit测试,它会发生一些奇怪的事情。我的测试用例看起来像那样... 我希望它能起作用,但我收到了这条信息。 有人能帮我吗?在这种情况下,我用那些... 导入静态组织。汉克雷斯特。配对者*;

  • 我有一个带有两个衰减函数(ES 2.4.4)的查询,我使用对查询项中的衰减函数得分求和。对于测试,我使用来防止任何其他分数(来自查询)影响我的分数(我想测试衰减函数)。 这些是我的衰减函数: 我的结果包括2篇不同日期的文章(2017-08-28,2009-05-08)具有相同的优先级(1000)和相同的分数!(13.122)怎么会这样?为什么没有获得更好的分数?所以我试图解释查询。 对于2017-

  • 问题内容: 下面是一个简单的Java程序。它具有一个称为“ cnt”的计数器,该计数器递增,然后添加到名为“ monitor”的列表中。“ cnt”由多个线程递增,并且值由多个线程添加到“ monitor”。 在方法“ go()”的末尾,cnt和monitor.size()应该具有相同的值,但它们没有相同的值。monitor.size()确实具有正确的值。 如果通过取消注释已注释的同步块之一并注释

  • 问题内容: 我正在调用通过管道连接的命令行程序。所有这些肯定可以在Linux上运行。 我的方法: 如果我打电话给 猫文件| grep asd,我得到了预期的结果。但是,并非所有命令都能正常工作。例如: 或这个: 该方法将返回null。我猜想这个问题取决于输出格式化命令,例如 head , tail , wc 等。我如何解决这个问题并获得输出的最终结果? 问题答案: 仍然没有找到使用Runtime.