打扰下 java 基础 题 谢谢

publicclassLamp{booleanisOpen=false;//publicvoidopen(Lampl){l.isOpen=true;//我感觉这已经都是t... public class Lamp {
boolean isOpen=false; //
public void open(Lamp l){
l.isOpen=true;//我感觉 这已经都是true了,那第一个输出 不应该为true吗?
}
}
-----------
public class Test1 {
public static void main(String[] args) {
Lamp l=new Lamp();
System.out.println(l.isOpen);//false
Lamp l2=new Lamp();
l2.isOpen=true;
l.open(l2);
System.out.println(l.isOpen);//false
}

}
----------------
结果 都为false 自己没反应过来。
展开
 我来答
邪恶势力联盟
2011-12-31 · TA获得超过112个赞
知道答主
回答量:120
采纳率:0%
帮助的人:52.6万
展开全部
首先你的代码你已经理解乱了,我把每行代码的意思给你说说,然后在体会一下看看能不能OK
public void open(Lamp l){...........这个方法是你传入一个对象l(Lamp)
l.isOpen=true..............................这行代码是把你传入的对象l的isOpen属性设置为true

--------------
Lamp l=new Lamp();
System.out.println(l.isOpen);//false................输出false,因为你声明的这个l没有执行open方法,就是说这个l对象没有经过open方法的步骤,你看对不对
Lamp l2=new Lamp();
l2.isOpen=true;.................这里你把再次声明的l2对象的属性设置为true,
所以l2.isOpen的值为true
l.open(l2);.........................这里你友用l对象调用open方法,但传进去的参数是l2
所以你是给l2的isOpen设置为true了,l2被设置了
System.out.println(l.isOpen);//false...............你输出的是l 对象的isOpen,
这个l对象 自 至终都没有辈open方法同化过
}
百度网友8882490
2011-12-31 · TA获得超过1747个赞
知道小有建树答主
回答量:1190
采纳率:0%
帮助的人:1002万
展开全部
public class Lamp {
boolean isOpen=false; //
public void open(Lamp l){
l.isOpen=true;//我感觉 这已经都是true了,那第一个输出 不应该为true吗?
}
}
-----------
public class Test1 {
public static void main(String[] args) {
Lamp l=new Lamp();
System.out.println(l.isOpen);//false
Lamp l2=new Lamp();
l2.isOpen=true;
l.open(l2);//这里运行过后 l2.isOpen == true 了,但l.isOpen 没有改变
System.out.println(l.isOpen);//false
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友afe836d
2011-12-31 · TA获得超过635个赞
知道小有建树答主
回答量:367
采纳率:50%
帮助的人:306万
展开全部
这个问题没反应过来是因为你没有看到java对象的传递方式(值传递和引用传递),open方法传递的是对象的引用,所以你I对象虽然调用了open方法,但你传递的参数是I2对象,改变了I2对象的isOpen的值,I对象的isOpen并没有变化。
public class Test1 {
public static void main(String[] args) {
Lamp l=new Lamp();
System.out.println(l.isOpen);//这里输出的是对象I的isOpen的值
Lamp l2=new Lamp();
l2.isOpen=true;
l.open(l2);//这里你传入的对象是I2,所以I2的isOpen被更改为true,I对象的isOpen没变化
System.out.println(l.isOpen);//I对象的isOpen没变化,所以还是false.
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a5ec2859d
2011-12-31 · TA获得超过147个赞
知道答主
回答量:168
采纳率:0%
帮助的人:83.1万
展开全部
我自己得看法是当然是打印false了 你看你调用那个isopen 你初始化赋得就是false 但不打印就是这个值了撒 你在那个open方法体里面又重新赋值为true但他没有执行这个open里面得方法所以打印得就是false 如果你执行了在打印得话就是true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shiyely
2011-12-31
知道答主
回答量:53
采纳率:0%
帮助的人:27.3万
展开全部
open改变的是参数的isOpen,你用 l.open(l2);只能改变l2的isOpen..

System.out.println(l.isOpen);//false
这个l的isOpen肯定还是false嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-12-31
展开全部
下面的解答都是可以吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式