Java 中的 Flyweight模式

曾赛 发布于 2010/04/28 16:33
阅读 1K+
收藏 4

 

public class Main { 
    public static void main(String[] args) { 
        String str1 = "fly"; 
        String str2 = "weight"; 
        String str3 = "flyweight"; 
        String str4; 

        str4 = str1 + str2; 
        System.out.println(str3 == str4); 

        str4 = (str1 + str2).intern(); 
        System.out.println(str3 == str4); 
    } 
}

两次的输出会是什么?

 

加载中
0
红薯
红薯

伪命题,Java 里本来就不能用 == 来比较字符串。

没试过,我猜结果是 false 和 true 

0
帆船
帆船

java比较字符串不是用String的equal...方法么?

0
inferrrrrr
inferrrrrr

搞明白这个对编程有多大的提高吗?

0
红薯
红薯

这叫反模式,对编程反正也没什么坏处,了解下 Java 的运行机制,呵呵:)

0
曾赛
曾赛

这个程序和Java的实现有关,也与Flyweight模式相关,所以有点剑走偏锋的感觉哈,不过这也正是它的有趣之处,今天看到,觉得甚或是可爱,遂分享之!

不过还是要恭喜红薯,你猜对了(),呵呵

0
浊世清风

我知道第一个是为什么,第二个intern()干什么使得,我api一下

0
浊世清风

4. String.intern():

再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个 方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用, 如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用

呵呵,明白了

0
ulfl
ulfl

何必呢,还要查找有没有相同的变量,如果是新建一个变量应该也用不了多少内存的吧

0
啦啦啦拉拉
啦啦啦拉拉
问这种问题好烦啊,我又不是JVM
0
乌龟壳
乌龟壳
我只想问,这种语言是用来给人增加麻烦的吗?
返回顶部
顶部