提问者:小点点

Servlet的doFilter方法中的StringBuffer或StringBuilder?[重复]


我正在实现我的自定义筛选器:

public class MyFilter implements javax.servlet.Filter

我应该在这个doFilter方法中使用哪个-StringBuffer还是StringBuilder?

我想这样使用它:

StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(MY_CODE_HERE);
response.sendRedirect(stringBuffer.toString());

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(MY_CODE_HERE);
response.sendRedirect(stringBuilder.toString());

我知道StringBuffer是线程安全的,但是StringBuilder就足够了吗?


共3个答案

匿名用户

局部变量是线程安全的,在doFilter()方法中声明的变量是线程安全的。出于您的目的使用StringBuilder,因为您不应该不必要地承担StringBuffer中使用的同步开销。

此外,Servlet请求和响应对象是为每个新的请求和响应重新创建的,因此从本质上讲,它们是线程安全的。doFilter()方法将在每个请求的单独线程中执行。

建议如下:

  1. 为什么局部变量线程在Java安全。
  2. StringBuilder和StringBuffer在Java
  3. servlet过滤器标签维基

匿名用户

因为它将是一个局部变量,不被线程共享,所以可以使用StringBuilder。

匿名用户

StringBuilder是一个更好的选择,因为它更快,因为它的非同步性质。ServletFilter doFilter为每个请求在自己的线程中运行,所以你不需要同步的数据结构。如果它仅仅是一个局部变量,那么StringBuilder就是选择。