请帮忙看下这个JAVA程序的输出结果
publicclassJ_Test{Stringm_kobe="1";String[]m_king={"2"};publicstaticvoidmain(String[]...
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 kobe, String[] king)
{
kobe = new String("3");
king[0] = new String("4");
}
}
输出结果为什么是14啊,我知道最终是m_kobe="1",m_king[0]=“4”,连接起来就是14,但是为什么经过mb_operate方法后,m_kobe的值没变,但m_king[0]的值变了。String和String[] 都属于引用类型,相当于C的指针那种,为什么只有m_king[0]的值变了。
有关StringBuffer的问题。
public class J_Test
{
public static void mb_method(StringBuffer x, StringBuffer y)
{
x.append(y);
y = x;
}
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
mb_method(a, b);
System.out.println(a + "," + b);
}
}
那为什么这个程序输出是AB,B啊,如果StringBuffer是引用传递,那么结果应该是AB,AB啊??? 展开
{
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 kobe, String[] king)
{
kobe = new String("3");
king[0] = new String("4");
}
}
输出结果为什么是14啊,我知道最终是m_kobe="1",m_king[0]=“4”,连接起来就是14,但是为什么经过mb_operate方法后,m_kobe的值没变,但m_king[0]的值变了。String和String[] 都属于引用类型,相当于C的指针那种,为什么只有m_king[0]的值变了。
有关StringBuffer的问题。
public class J_Test
{
public static void mb_method(StringBuffer x, StringBuffer y)
{
x.append(y);
y = x;
}
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
mb_method(a, b);
System.out.println(a + "," + b);
}
}
那为什么这个程序输出是AB,B啊,如果StringBuffer是引用传递,那么结果应该是AB,AB啊??? 展开
3个回答
展开全部
我明白了你要表达的意思了,请看下面一段话:
在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。
也就是说在你的mb_method()方法中,参数是引用传递,也就是x,y分别为a,b引用的拷贝,在方法中,你给x追加了值,也就相应的改变了a的值,但是第二条语句:
y = x; 确实将引用y指向了另外一个对象x,这样y就和b只想不同的两个对象了,当然b的值也就不会改变了。
希望对你有帮助,不明白可以追问
在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。
也就是说在你的mb_method()方法中,参数是引用传递,也就是x,y分别为a,b引用的拷贝,在方法中,你给x追加了值,也就相应的改变了a的值,但是第二条语句:
y = x; 确实将引用y指向了另外一个对象x,这样y就和b只想不同的两个对象了,当然b的值也就不会改变了。
希望对你有帮助,不明白可以追问
展开全部
String kobe值传递 String[] king址传递。String是引用类型里面唯一一个会值传递的,跟基本类型一致
更多追问追答
追问
为什么会有这种奇怪的情况啊:String是引用类型里面唯一一个会值传递的!!!!String在任何情况下都是值传递吗!!?
追答
http://freej.blog.51cto.com/235241/168676/
这个博客分析的挺好的,你可以看看去,就明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-05
展开全部
想要知道kobe 为什么 没有变 就要弄清楚2点: 1. kobe是什么类型 2.new String("3")是什么意思(这个东西没有意义上的值)。 king[0]就不一样了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询