A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-5-16 13:30  /  1491 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class J_Test {
         String m_kobe = "1";
         String[] m_king = {"2"};
         public static void main(String[] args) {
                 J_Test app = new J_Test();
                 app.mb_operate(app.m_kobe, app.m_king);
                 System.out.println(app.m_kobe+app.m_king[0]);
         }
         static void mb_operate(String m_kobe, String[] king) {
                 //System.out.println(m_kobe);
                 m_kobe = new String("3");
         //        System.out.println(king[0]);
                 king[0] = new String("4");
         }
}

为什么结果是14

2 个回复

倒序浏览
  m_kobe = new String("3");
这段代码执行后,m_kobe的值只在该函数内有效。
   king[0] = new String("4");
而这段代码,king[0]改变了指向。
在函数内只有引用类型改变引用才能达到赋值的功能。因为都是局部的。
所以m_kobe的值是1,而king[0]是4,
打印结果14。

你可以模拟一个这样的函数
public static void main(String[] args)
{
int a=3;
chg(a);
sop(a);
}
public staticvoid chg(int x)
{
x=4;
sop(a);
}
j结果为4,3。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
  1. public class J_Test {
  2.          String m_kobe = "1";//这里是类成员变量(全局变量)
  3.          String[] m_king = {"2"};
  4.          public static void main(String[] args) {
  5.                  J_Test app = new J_Test();
  6.                  app.mb_operate(app.m_kobe, app.m_king);
  7.                  System.out.println(app.m_kobe+app.m_king[0]);
  8.          }
  9.          static void mb_operate(String m_kobe, String[] king) {
  10.               //   System.out.println(m_kobe);
  11.                  m_kobe = new String("3");//这里表示的是局部变量哦!
  12.              //  System.out.println(king[0]);
  13.                  king[0] = new String("4");//这里表示的是局部变量哦
  14.          }
  15. }
  16. /*
  17. 我的回答:你在mb_operate方法的参数列表中定义了一个和类中属性同名的m_kobe局部变量
  18. 在这个方法体之中,暂时会隐藏类中的同名属性值,也就是说在mb_operate方法中m_kobe编译是
  19. 把当作局部变量看待,在程序之中这个局部变量的确是指向了一个新字符串对象,但是这个方法一
  20. 执行完之后 这个局部变量就会被释放,也就是不存在了   在方法外部这个m_kobe又被当成
  21. 类的属性值看待     如果你要演示mb_operate方法中的变量是类成员变量的话 可以这样定义:
  22. //修改mb_operate方法
  23. public void mb_operate(String m_kobe, String[] king) {
  24.               //   System.out.println(m_kobe);
  25.                  this.m_kobe = new String("3");
  26.              //  System.out.println(king[0]);
  27.                  this.king[0] = new String("4");
  28. }
  29. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马