解读:
对于原始数据类型,也就是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;
}