黑马程序员技术交流社区

标题: 求解 [打印本页]

作者: 湛添友    时间: 2014-5-16 13:30
标题: 求解
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
作者: heima_xyu    时间: 2014-5-16 13:52
  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。

作者: caijunsong    时间: 2014-5-16 16:13
  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. */
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2