Java不要的变量是否自动回收

Java不用的变量是否自动回收
Java中没有用的变量是否就自动被当成垃圾回收了?

下面这段代码:
public class A{
 ...
 public void X(){
  String a;
  a=new String();
  ...
}
...
}
是否每次调用X()都会给a分配新的内存空间,以前给a分配的内存空间时间长了就会被自动释放(回收)?
和下面这段代码比
public class A{
 String a;
 ...
 public void X(){
  a=new String();
  ...
}
...
}
后面这段代码会不会更能节省内存空间?效率更高?

------解决方案--------------------
java垃圾回收器什么时候运行那是没办法预测的!有人说当内存使用率大于95%时,会运行垃圾收集,但也不一定!还有,你那两只方法都不是好的!String 不要使用new String()!String a = "";最好!