假设我在session中存储了一个叫user的对象,那么取出这个对象最普遍的方法就是:User user = null;user = (User)session.getAttribute("user");但今天看到有个朋友他是这样写的:User user = new User();user = (User)session.getAttribute("user");我的问题就是第二种方法与第一种方法到底有什么区别?我觉得第二种方法只是对user对象赋值,在内存中其实存在两个对象,一个是session中的,一个是new的,而第一种在内存中只有一个session中的对象,不知道我的理解对不对?

解决方案 »

  1.   

    差不多
    第二种被赋值后new的User会在空闲的时候被垃圾回收装置回收
      

  2.   


    是的,但是new出来的那个对象已经没有任何引用指向它,成为了“垃圾”,而且是不必要产生的垃圾,纯粹的浪费资源
    所以千万不要写成那样,太愚蠢了
      

  3.   

    从来没有见过这种写法的。User user = new User(); // 这里new 的对象完全多余,没有任何作用user = (User)session.getAttribute("user"); 
      

  4.   

    另外建议lz去了解一下java的垃圾收集机制你在程序里new出来的对象大多数都会被当作垃圾收集掉,而jvm在进行垃圾收集的时候,是会对性能造成比较大的影响的
    所以我们在编程的时候要注意一点,就是尽可能得减少垃圾的产生,从某种意义上将就是尽可能少new对象出来,因为对象会占用内存空间、在回收的时候还会占用很多系统资源打个比方,对象就好比塑料袋,你不可能不用塑料袋,但是你必须少用塑料袋,因为生产塑料袋需要资源,而且塑料袋被丢弃之后还会污染环境
    new对象会占用内存,回收对象会影响性能(sun公司的jvm尤其如此)
      

  5.   

    LZ 说错了,最普遍的方式应该是 : User user = (User)session.getAttribute("user");