java基础---->string字面量的使用 string字面量 友情链接

  这里简单的理解一下java中关于string字面量的知识,关于字节码可以使用java自带的javap工具查看。

一、直接贴出测试的代码

A string literal always refers to the same instance of class String.

package com.linux.huhx.stringTest;
/**
 * Created by huhx on 2017-05-12.
 */
class Test {
    public static void main(String[] args) {
        String hello = "Hello", lo = "lo";
        System.out.print((hello == "Hello") + " ");
        System.out.print((Other.hello == hello) + " ");
        System.out.print((com.linux.huhx.Other.hello == hello) + " "); // 这个和上面的Other在不同的包内。内容一样
        System.out.print((hello == ("Hel" + "lo")) + " ");
        System.out.print((hello == ("Hel" + lo)) + " "); // false
        System.out.print((hello == ("Hel" + lo).intern()) + " ");
        System.out.println(hello == new String("hello")); // false
    }
}

class Other {
    static String hello = "Hello";
}

// true true true true false true false

二、关于String的intern方法官方文档的解释

// 一个字符串池,最初是空的,是由类字符串私有维护的。
1、A pool of strings, initially empty, is maintained privately by the class String. 

// 如果常量池中已经有了这个字符串,那么直接返回常量池中它的引用,如果没有,那就将它的引用保存一份到字符串常量池,然后直接返回这个引用。
2、When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned. 

3、It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true. 

友情链接