Java软件低级错误(九 ):Java参数传递:传值还是传引用?

 解读:
对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没有改变。
      对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象

 

案例:

问题代码:

catch (Exception ex)
{
    processException(ex);
    request.setAttribute("exception", ex);
    ... ...
    forwardURL(CmdBusi.URL_ERROR, request, response);
}
... ...
public void processException(Exception e)
{
    String message=e.getLocalizedMessage();
    if(message.indexOf("ORA-00001")!=-1)
    {
       message = “... ...”;
       e = new Exception(message);
    }
}

processException(ex)方法调用结束后,ex并没有指向在processException中新生成的对象,所以对于ex的修改也就前功尽弃了。

正确代码:

正确的写法:增加返回值,将e作为返回值返回:
catch (Exception ex)
{
    request.setAttribute("exception", processException(ex));
    ... ...
    forwardURL(CmdBusi.URL_ERROR, request, response);
}
... ...
 
public Exception processException(Exception e)
     {
   String message = e.getLocalizedMessage();
 if (message.indexOf("ORA-00001") != -1)
 {
  message = "... ...";
  return new Exception(message);
 }
 return e;
}

 

你可能感兴趣的:(Java软件低级错误(九 ):Java参数传递:传值还是传引用?)