将对象初始化为null或new?

时间:2014-04-23 14:38:23

标签: java performance coding-style

我正在开发一个Web应用程序,当我在服务器端接收参数时出现了一个问题。我将DTO的(数据传输对象)初始化为null的局部变量,当传递特定参数时,我将对象初始化为new。举例说明我的代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Object_DTO object_DTO = null;

    if(request.getParameter("parameter").equals("hello")) {
        object_DTO = new Object_DTO();
        object_DTO.setAttr("attr");
        ...
    }
}

关于性能的问题是:初始化对象的最佳方法是什么?我应该在声明时将其设置为new还是保持我正在做的方式?

2 个答案:

答案 0 :(得分:6)

我个人认为这取决于范围。在object_DTO声明之外使用if吗?在此代码示例中,使用null

可能很有用
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // Note that unless except in certain cases (IoC)
    // this scenario is quite easy to avoid
    Object_DTO object_DTO = null;

    if(request.getParameter("parameter").equals("hello")) {
        object_DTO = new Object_DTO();
        object_DTO.setAttr("attr");
        ...
    } else if (request.getParameter("parameter").equals("goodbye")) {
        object_DTO = new Object_DTO();
    }

    if (object_DTO == null) {
        // Bad response
    }
}

否则,请始终尝试对变量使用最有限范围,但在性能方面这是次要的。

但是,在单独的表现说明中,我会不再重复拨打getParameter()。将其分配给String并改为引用它:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String parameter = request.getParameter("parameter");

    if (parameter.equals("hello")) {
        Object_DTO = new Object_DTO();
        ...
    }
}

答案 1 :(得分:2)

Object_DTO object_DTO = null;不会创建任何对象。

new Object_DTO()创建并初始化一个对象,只有当你真正需要一个对象时才应该这样做。