java – 静态方法中的局部变量是否也是静态的?

前端之家收集整理的这篇文章主要介绍了java – 静态方法中的局部变量是否也是静态的?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道如果我们以静态方法声明它们,所有局部变量都将变为静态的?

例如:

public static void A(){
        int x [] = {3,2};
        changeX(x);

        for (int i = 0; i< x.length; i++){
             System.out.println(x[i]);   // this will print -1 and 1
        }
  }
  private static void changeX(int[] x){
        x[0] = -1;
        x[1] =  1;
  }

据我所知,Java总是通过值传递,但是为什么X的状态在进行changeX调用后发生了变化?有人可以解释一下吗任何人都可以解释Java如何处理内存分配方面的静态变量?如果我们将一个静态变量作为一个参数传递给函数会发生什么(我知道人们通常不会这么做)

解决方法

大多数问题的答案是“与任何其他变量相同”.

静态方法中的局部变量只是静态方法中的局部变量.它们不是静态的,它们不是特别的.

静态变量保存在与对应的Class对象相连的内存中;静态引用变量引用的任何对象都只能存在于常规堆中.

当一个静态变量传递给一个方法作为参数时,绝对没有任何有趣的事情发生.

关于你的代码中的情况:

>想象一下,你在一个字符串上有一个玩具气球(气球是你的数组对象,字符串是在A()中声明的字符串的引用)
>现在你将另一个字符串绑定到气球,并将该字符串交给一个朋友(正是当你调用changeX()方法时会发生什么:字符串是方法的参数,并且它指向同一个对象.
>接下来,你的朋友拉入字符串,拿一个黑色的标记,并在气球上画一张脸(这就像修改数组的changeX()方法).
>然后你的朋友不了解他的字符串,只是将你的字符串附加到气球(该方法返回,并且changeX()中的局部变量超出范围.)
>最后你卷起字符串并看着气球:当然,你看到脸(你的A()例程看到改变的数组.)

真的很简单!

原文链接:https://www.f2er.com/java/126397.html

猜你在找的Java相关文章