黑马程序员技术交流社区
标题:
求解
[打印本页]
作者:
湛添友
时间:
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
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");//这里表示的是局部变量哦
}
}
/*
我的回答:你在mb_operate方法的参数列表中定义了一个和类中属性同名的m_kobe局部变量
在这个方法体之中,暂时会隐藏类中的同名属性值,也就是说在mb_operate方法中m_kobe编译是
把当作局部变量看待,在程序之中这个局部变量的确是指向了一个新字符串对象,但是这个方法一
执行完之后 这个局部变量就会被释放,也就是不存在了 在方法外部这个m_kobe又被当成
类的属性值看待 如果你要演示mb_operate方法中的变量是类成员变量的话 可以这样定义:
//修改mb_operate方法
public void mb_operate(String m_kobe, String[] king) {
// System.out.println(m_kobe);
this.m_kobe = new String("3");
// System.out.println(king[0]);
this.king[0] = new String("4");
}
*/
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2