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

为什么我的Java方法不能更改传递的变量?

子车飞鹏
2023-03-14
问题内容

当我看到以下代码无法按预期工作时,我有些困惑。

我认为Java总是通过引用将变量传递给函数。因此,为什么函数不能重新分配变量?

public static void main(String[] args) {

  String nullTest = null;

  setNotNull(nullTest);

  System.out.println(nullTest);
}

private static void setNotNull(String s) {
  s = "not null!";
}

程序输出null


问题答案:

对对象的引用是通过Java中的
传递的,因此在方法内部分配给局部变量不会更改原始变量。仅局部变量s指向新字符串。稍微了解一下ASCII艺术可能会更容易理解。

最初,您有:

------------
| nullTest |
------------
     |
    null

首次输入方法setNotNull时,您 将在中 获得nullTest 的副本s。在这种情况下,nullTest的值为空引用:

------------    ------------
| nullTest |    |    s     |
------------    ------------
     |               |
    null            null

然后重新分配s:

------------    ------------
| nullTest |    |    s     |
------------    ------------
     |               |
    null         "not null!"

然后离开方法:

------------
| nullTest |
------------
     |
    null


 类似资料:
  • 我试图在我的程序中实现加密,但在方法上遇到了一些困难。我有一个未加密的数组,它应该保持未加密,另一个数组我想加密。然而,当我调用这个方法时,它会加密两个数组。 我无法发现问题,因为在我的理解中,我返回加密数据并将其分配给另一个数组,但由于某种原因,我传递的数组也发生了变化。 这是输出 提前感谢您的帮助!

  • 我正在迭代Java 7循环和Java 8 循环中的列表。Java 8 循环希望其中的变量不会更改。例如: 有人能解释一下为什么吗?是Java 8的弊端吗?

  • 基本上,我试图用一个名为“a”的变量设置数组的长度,并将其声明为3和int。当我试图用for循环查看所有元素时,我不会将“null”作为元素。到现在为止,一直都还不错。然而,当有人想向该数组中添加一个元素时,我会向提到的变量“a”中添加1,从而延长该数组的长度,并允许我向该数组中再添加一个元素。但它不起作用。以下是代码: }

  • 问题内容: 为什么此代码无法编译? 为什么我不能将类变量传递给? 问题答案: 该操作符对引用类型,像,而不是对象,如。您可能想要类似 旁注:如果编写,您的代码将更加简洁 但是,我不确定是否需要某种方法。

  • 问题内容: 我尝试设置复选框背景颜色的样式,但是无论做什么都不会改变。我正在使用最新的Firefox 29。 CSS中是否有一些规则更改,或者可能在浏览器中? CSS: 问题答案: 复选框无法设置样式。您将需要一个第三方js插件,这里有很多可用的插件。 如果要自己执行此操作,则基本上涉及隐藏复选框以创建一个元素并对其进行样式设置,然后将其click事件绑定到两个函数,一个用于更改其外观,另一个用于

  • 问题内容: 我定义了一个Java函数: 一种调用方式是这样的: 为什么不能通过显式传递泛型类型参数来调用它?: 我从编译器得到错误。 问题答案: 当Java编译器无法自行推断静态方法的参数类型时,您始终可以使用完整的合格方法名称Class来传递它。<类型> method();