java.util.Stack源代码中有这么一个方法:/**
* Pushes an item onto the top of this stack. This has exactly
* the same effect as:
* <blockquote><pre>
* addElement(item)</pre></blockquote>
*
* @param item the item to be pushed onto this stack.
* @return the <code>item</code> argument.
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item); return item;
}虽然短短四行,却让我很疑惑,
为什么方法的参数里有item,返回的仍然是item呢?
也就是说,既然我已经有了引用a,我为什么还要去调用push方法再获得一遍这个引用a呢,不是多此一举吗?
就好比下面的这段多此一举的代码:Stack s = new Stack();
String str = "a";
String str2 = s.push(str);
System.out.println(str2);我想问问java的设计者为什么不设计成如下的形式?public void push(E item) {
addElement(item);
}这样不是更简单,也更高效吗?
* Pushes an item onto the top of this stack. This has exactly
* the same effect as:
* <blockquote><pre>
* addElement(item)</pre></blockquote>
*
* @param item the item to be pushed onto this stack.
* @return the <code>item</code> argument.
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item); return item;
}虽然短短四行,却让我很疑惑,
为什么方法的参数里有item,返回的仍然是item呢?
也就是说,既然我已经有了引用a,我为什么还要去调用push方法再获得一遍这个引用a呢,不是多此一举吗?
就好比下面的这段多此一举的代码:Stack s = new Stack();
String str = "a";
String str2 = s.push(str);
System.out.println(str2);我想问问java的设计者为什么不设计成如下的形式?public void push(E item) {
addElement(item);
}这样不是更简单,也更高效吗?
或者我没理解清楚?能给个示例代码给我看看吗?
就可以了,不用处理返回值
Stack中自身定义的5个方法都是有返回值的 统一的同时也有为人性化作考虑
假如str参数是直接取自某一复杂表达式 设计成有返回值就可以省一步多余的赋值操作了看起源码解释
This has exactly
* the same effect as:
* <blockquote><pre>
* addElement(item)</pre></blockquote>
很能说明是在实现了功能之上的设计层包装
可是大部分情况下,100次里有99次都不需要得到return值的,1次是需要赋值的,况且,赋值的表达式如果很复杂,那也是很少的情况下才会出现
也就是说,大约10000次里,只有1次需要return值,而多执行了9999次return语句,这不是很伤性能吗?
再说把Stack建立在Vector的基础上也不是好的设计选择.
那你说说这个方法里,什么才是第一优先准则。