Java变量设置

时间:2013-04-08 06:10:53

标签: java

case1,case2和case3之间有什么区别吗?是否有与绩效相关的优势或劣势?

public class Test {

private String name;

    public void action (){

        name = doSome(); // case 1
        setName(doSome()); // case2
        this.name =doSome(); // case3

    }


    public String doSome(){
            return "Hello";
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }


    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
}

4 个答案:

答案 0 :(得分:3)

使用Eclipse上的调试和断点来查看每个案例采取的步骤数。越少越好。

Case 1迈出了一步

Case 2采取了两个步骤

Case 3 =与Case 1相同

Case 1Case 3相同,this关键字仅指当前的类。

答案 1 :(得分:3)

我想,在第2种情况下,我们在堆栈上放了一个额外的方法,即setName.But从性能的角度来看,增益几乎可以忽略不计。所以根据我的说法,在这个例子中,我们应该从代码维护中思考和可读性的观点而不是表现。

答案 2 :(得分:0)

案例1和3将生成相同的代码(除非它们是不同的“名称”)。第二个将有一个额外的函数调用,可能会或可能不会被JIT优化。但是,这不是你应该注意的缺点。

答案 3 :(得分:0)

我更喜欢案例2,因为在案例1中,如果将来某个时候引入了局部变量name,则会导致读取代码的人对其引用的变量产生混淆。

在案例3中,虽然范围更清楚,但是不使用setter的事实意味着如果将来某个时候你改变了name字段的设置方式(例如:你想修剪空格),你必须改变所有修改名称变量的代码,如果你在任何地方使用了case 2,你只需要更新setter方法。

在我看来,健康的企业软件开发应该不断重构代码,因为发现了错误并且业务需求不断变化,因此案例2将在这里给您带来优势。但如果这只是一个大学的家庭作业,那么你将逃脱案例1& 3。

性能方面的案例1& 3似乎消耗较少的函数调用,但它是否会给你带来显着改进我不知道。

另外请记住,Eclipse等大多数流行的IDE只需点击几下鼠标按钮即可为您自动生成getter和setter - 这应该回答“getters& setters在Java中是如此麻烦。” “