有谁帮我解释一下这2个java小程序? 5

1:publicclassTest_123{Stringm_kobe="1";String[]m_king={"2"};publicstaticvoidmain(Stri... 1:public class Test_123 {
String m_kobe = "1";
String[] m_king = {"2"};
public static void main(String[] args) {
Test_123 app = new Test_123();
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");
}
}

2:import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Test_111 {

public static void main(String[] args) throws IOException {
RandomAccessFile f = new RandomAccessFile("a.txt","rw");
f.writeBoolean(true);
f.writeBoolean(false);
for(int i = 1; i < 10; ++i)
f.writeInt(i);
f.seek(6);
System.out.println(f.readInt());
f.close();
}
}

为什么第一个的结果是14,第二个的结果是2?解释一下为什么?菜鸟一个。。本人!!
展开
 我来答
糖宝贝o
2013-12-05 · 超过69用户采纳过TA的回答
知道小有建树答主
回答量:230
采纳率:100%
帮助的人:133万
展开全部
我就说说第一个吧,第二个我没看懂,第一个因为你传的第二个参数(app.m_king 传给了String 【】 king)此时king中放的是原来m_king的首地址,你改变了首地址中的值,那么原来的值也会改变!而第一个参数是一个String类型的数据,局部变量的改变的只是他的一个副本,出了那个mb_operate函数,那个kode变量就没用了。所以输出的函数是俩个字符串的连接“1”+“4”。希望帮到你!
匿名用户
2013-12-05
展开全部
public class Test_123 {
String m_kobe = "1";
String[] m_king = {"2"};
public static void main(String[] args) {
Test_123 app = new Test_123();
app.mb_operate(app.m_kobe, app.m_king);
System.out.println(app.m_kobe+app.m_king[0]);
}
// String 类型的参数是不能引用传递的,它就是传值,在该函数里怎么改都不会影响kobe的值
// String[] 是数组,数组类型是可以引用传递的,所以在函数里的改变会影响到 m_king
static void mb_operate(String kobe, String[] king) {
kobe = new String("3");
king[0] = new String("4");
}
}

第二个题:

public class Test_111 {

public static void main(String[] args) throws IOException {
RandomAccessFile f = new RandomAccessFile("a.txt","rw");
// 写入文件1个字节, boolean类型的占1个字节
f.writeBoolean(true);
// 写入文件1个字节, boolean类型的占1个字节
f.writeBoolean(false);
for(int i = 1; i < 10; ++i)
f.writeInt(i); // int类型是4个字节,每次写入4个字节
f.seek(6); // 从文件头开始偏移6个字节,前两个是true和false。后面都是占4个字节的整数
所以3 - 6 位置是第一个整数 1,偏移6个字节,那么下一个整数就是2
System.out.println(f.readInt()); // 这里只读取一个整数,即从当前位置只读取4个字节,而这四个字节,刚好是整数2的位置,因为它是int,占4个字节
f.close();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
私礼口0w
2013-12-05
知道答主
回答量:28
采纳率:0%
帮助的人:13.6万
展开全部
第一个确实是为14。。。因为,你这一句app.mb_operate(app.m_kobe, app.m_king); 是调用自身的mb_operate(String kobe, String[] king)方法。传了2个值进去。第一个是m_kobe = "1"; 第二个是m_king = {"2"}; 你在mb_operate(String kobe, String[] king)方法中。给k[0]赋值为“4”。。。你在输出的时候是。System.out.println(app.m_kobe+app.m_king[0]); 。。m_kobe=“1”,m_king[0]=“4”。两个都是字符串。。所以输出14
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式