加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:27:38 所属栏目: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 ch
我想知道如果我们以静态方法声明它们,所有局部变量都将变为静态的?

例如:

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()例程看到改变的数组.)

真的很简单!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读