BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #34637同步于 2014/9/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Re: [问题]晕菜了,一个小问题~~~~~~~~

wangxiaobupt
2014/9/16镜像同步78 回复
为什么会有问题 【 在 vgyijn (hello world) 的大作中提到: 】 : 一个小问题想不懂 : ArrayList<String> string = new ArrayList<String>(); : string.add("hello"); : ...................
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
vgyijn机器人#1 · 2014/9/16
【 在 wangxiaobupt 的大作中提到: 】 : 为什么会有问题 : 一条语句是 true; 没有问题吗?有问题啊......
wangxiaobupt机器人#2 · 2014/9/16
int i= 5 ; 返回还是5呢 一句 5;也有问题了呗 【 在 vgyijn 的大作中提到: 】 : 一条语句是 : true; : 没有问题吗?有问题啊......
vgyijn机器人#3 · 2014/9/16
【 在 wangxiaobupt 的大作中提到: 】 : int i= 5 ; 返回还是5呢 : 一句 5;也有问题了呗 : 是啊,我觉得 5; 这样不对呀,这不是语句啊 而int i = 5; 是对的,定义int型变量并赋值5。
wobudong机器人#4 · 2014/9/16
你的问题好特别,感觉这两个本来就差别很大
lixing机器人#5 · 2014/9/17
ArrayList.add方法是按照 Collection.add(E) 的指定实现的。
ccyingzi2009机器人#6 · 2014/9/17
去看一下人家arraylist的源码是怎么封装add这个方法的。
taoch机器人#7 · 2014/9/17
执行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"); : ...................
limingji0503机器人#8 · 2014/9/17
lz说的对,ArrayList中的返回值是无用的。但是为了Collection接口的一致性考虑,它必须带有返回值。
limingji0503机器人#9 · 2014/9/17
附上详细的解释: 我们可以在Java的源码中看到。ArrayList的返回值是true。而且还是写死的。这不符合道理啊。想想发现,这可能是为了处于一致性的考虑。 看ArrayList的继承关系,其实现了Collection<E>接口。 而在借口的定义中,add()方法必须有一个boolean类型的返回值。通过上面的解释:如果通过这次函数调用,collection的值改变了,那么返回值为true,如果没有改变,那么返回值为false。那么这个返回值是为谁设定的呢? 查看了一下有哪些类或者借口实现了Collection接口。发现可能就是Set()相关的接口。因为和Hash表类似,当存在重复元素的时候可能会对原有值进行覆盖,进而返回不同的值。 查看一下HashSet的源码。发现果不其然。 如果插入的元素没有在set中出现。那么返回值为true.如果插入的元素已经存在在set中。那么返回值为false。 由此可以得出结论ArrayList中的返回值是为了Collection接口的一致性考虑。本身是无意义的。因为如论插入的是什么,返回值都是true。