返回信息流为什么会有问题
【 在 vgyijn (hello world) 的大作中提到: 】
: 一个小问题想不懂
: ArrayList<String> string = new ArrayList<String>();
: string.add("hello");
: ...................
这是一条镜像帖。来源:北邮人论坛 / java / #34637同步于 2014/9/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Re: [问题]晕菜了,一个小问题~~~~~~~~
wangxiaobupt
2014/9/16镜像同步78 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
int i= 5 ; 返回还是5呢
一句 5;也有问题了呗
【 在 vgyijn 的大作中提到: 】
: 一条语句是
: true;
: 没有问题吗?有问题啊......
【 在 wangxiaobupt 的大作中提到: 】
: int i= 5 ; 返回还是5呢
: 一句 5;也有问题了呗
:
是啊,我觉得
5;
这样不对呀,这不是语句啊
而int i = 5;
是对的,定义int型变量并赋值5。
执行add时候新建立一个栈帧,然后执行string对象(好别扭的命名方式)中add方法。
方法体中语句执行完毕就可以完成在List添加元素。
至于返回值,是切换会调用add语句那个栈帧时候被使用。
相对比较好的写法应该是
if(string.add("hello")){
//do something
}
不过一般程序中只是需要执行添加的逻辑就ok了。。就不需要把执行结果赋值给一个boolean
【 在 vgyijn (hello world) 的大作中提到: 】
: 一个小问题想不懂
: ArrayList<String> string = new ArrayList<String>();
: string.add("hello");
: ...................
附上详细的解释:
我们可以在Java的源码中看到。ArrayList的返回值是true。而且还是写死的。这不符合道理啊。想想发现,这可能是为了处于一致性的考虑。
看ArrayList的继承关系,其实现了Collection<E>接口。
而在借口的定义中,add()方法必须有一个boolean类型的返回值。通过上面的解释:如果通过这次函数调用,collection的值改变了,那么返回值为true,如果没有改变,那么返回值为false。那么这个返回值是为谁设定的呢?
查看了一下有哪些类或者借口实现了Collection接口。发现可能就是Set()相关的接口。因为和Hash表类似,当存在重复元素的时候可能会对原有值进行覆盖,进而返回不同的值。
查看一下HashSet的源码。发现果不其然。
如果插入的元素没有在set中出现。那么返回值为true.如果插入的元素已经存在在set中。那么返回值为false。
由此可以得出结论ArrayList中的返回值是为了Collection接口的一致性考虑。本身是无意义的。因为如论插入的是什么,返回值都是true。