(1)我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,我们创建了String类的对象str。担心陷阱!对象可能并没有被创建!唯一可以肯定的是,指向String类的引用被创建了。至于这个引用到底是否指向了一个新的对象,必须根据上下文来考虑,除非你通过new()方法来显要地创建一个新的对象。因此,更为准确的说法是,我们创建了一个指向String类的对象的引用变量str,这个对象引用变量指向了某个值为"abc"的String类。清醒地认识到这一点对排除程序中难以发现的bug是很有帮助的。  (2)使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。这个思想应该是享元模式的思想,但JDK的内部在这里实现是否应用了这个模式,不得而知。第一个问题涉及到了对象的存储(在java中栈的存取)

解决方案 »

  1.   

    一,就是1+1=2这样的简单问题,声明了1个对象
    二,session机制是一种服务器端的机制,
        具体请看
        http://www.zhanglihai.com/article/2005-01-24/0G7CG6C0CR4C01C27G121CG0SU2PWLAF.xtp
    三,ejb之间通过ejb容器上的某个对象或接口通信,具体不清楚了
      

  2.   

    1.有可能是2个,但不一定是2个,
    因为如果在内存中存在"xyz"对象了,那么s就直接指向这个"xyz"对象,
    而没有去新new一个;2.request.getSession(true).getId()来区别;
      

  3.   

    ejb是通过IIOP协议进行通信,他有client 跟和 server 存根,和corba有点类似,这主要是有容器管理,当server端接受到来此客户端的请求后,解析相关数据,然后查找配置文件中信息,执行相关程序,这里面涉及到反射操作、安全机制,ejb3.0相关的ejb将变得更为简单