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

递增Integer变量不会影响另一个引用同一对象的变量

养振濂
2023-03-14
问题内容

我总是理解静态变量在被引用时共享一个实例。我想对此进行测试,但结果与我预期的不同。

static Integer counter = 0;
static Integer test = counter;

public static void main(String args[]) {
     counter++;
     System.out.println("counter: " + counter);
     System.out.println("test: " + test);
}

输出:

柜台:1

测试:0

由于test引用counter我认为,当我增加counter那么test将自动以及递增。但是,似乎test0从某处引用,问题是在哪里?


问题答案:

由于test引用counter

这个假设是错误的。在Java中,您不能引用变量。变量中存储的是一个值。该值可以是原始类型值或引用类型值。对于基元,值是基元的值。对于引用类型,

引用值(通常只是引用)是指向这些对象的指针,还有一个特殊的空引用,它不引用任何对象。

int a = 0;
int b = a;

计算该变量a以产生一个值0,并将该值存储在中b

Integer a = 0;
Integer b = a;

0转换为Integer直通Integer.valueOf(int)和值,将对Integer对象的引用存储在中a。然后a进行评估,生成对该Integer对象的引用的值,并将该值存储在中b

同样,变量static是无关紧要的事实。

解决此问题的唯一方法是test手动更新,即

counter++; 
test = counter;


 类似资料:
  • 问题内容: 我试图了解变量如何在python中工作。说我有一个对象存储在变量中: 如果我分配给,则它们都指向同一个对象: 但是,如果我重新分配或,那就不再正确了: 这两个变量现在具有不同的值: 我不明白为什么变量现在不同。为什么不再是真的?有人可以解释发生了什么吗? 问题答案: Python具有引用 对象的 名称 。对象与名称分开存在,名称与它们引用的对象分开存在。 __ 在为“名称分配名称”时,

  • 为什么我不能这样做? 我得到: 致命错误:常量表达式包含无效操作 这有什么办法吗?

  • 我想每按100次就增加一个var。我不能为每一百个写一百个其他的如果。

  • 问题内容: 我有一个嵌套的字典,我们称它为字典d。该词典的键是一个整数,每个键的值是另一个词典。我正在python 2.7上尝试一个简单的代码来更新一个外键的值,但似乎它正在更新外键的ALL的值。 希望这些代码将使其更易于理解。这是我的意见。 然后是输出: 您会看到,我只为d [0] [‘mean’]分配了‘1’,但是d [1] [‘mean’]也有所更新。如果我增加d键的数量,它将只更改所有d键

  • 问题内容: 我想将一个类变量传递给另一个类,并使其成为该类的类变量。在以下情况下我该怎么做? 问题答案: 很难理解您正在问的问题,但这是一个可能的答案: 使B类成为A的子类: 如果重新声明为,则会出现一种情况,其中存在一个可以称为或的属性。(或在任一或刚刚…甚至作为或地方,并有类型和分别。) 如果您无法在和(或,以及一些包含声明的第三类)之间创建直接或子类型关系,那么您很不走运。他们无法共享声明。

  • 问题内容: 我有类似的东西: 现在,我想用另一个JSON结构值替换“我的英语标题” 。 我尝试了: 但这是行不通的。任何人都可以给我提示如何在JSON变量中获取JSON值? 编辑:这是使用Jquery的上下文菜单,但是我在下面的所有解决方案中都遇到了问题,这是时候传递分隔符的字符串了。它不显示分隔符,因为它将字符串而不是仅字符串传递给对象。 例: 问题答案: 解决您的修改。尝试以下