String若干问题

原创 2007年09月19日 22:10:00
主要就是string literals1 及constant pool问题了,看以下代码。
public class StringExample ...{
    
public static void main(String[] args) ...{
        String s0 
= "Programming";
        String s1 
= "Program"+"ming";
        String s2 
= new String("Programming");
        String s3 
= new String("Programming").intern();
        System.out.println(
"s0 == s1 :"+(s0==s1));
        System.out.println(
"s0 == s2 :"+(s0==s2));
        System.out.println(
"s0 == s3 :"+(s0==s3));
    }

}


运行结果:
s0 
== s1 :true
s0 
== s2 :false
s0 
== s3 :true

 

public class StringTest...{
    String s1;
    
public StringTest()...{
        s1 
= "Programming";
    }

}


public class StringExample ...{
    String s0;
    
public StringExample()...{
        s0 
= "Programming";
    }

    
public static void main(String[] args) ...{
        System.out.println(
new StringExample().s0 == new StringTest().s1);
    }

}


运行结果:
ture

 

 


1From the Java Language Specification: “A string literal consists of zero or more characters enclosed in double quotes. Each character may be represented by an escape sequence.”

 

The “constant pool” is something that is computed at compile time and stored with the compiled .class file. It contains information on methods, classes, interfaces, …, and string literals. When the JVM loads the .class file and the s0 and s2 variables are resolved, the JVM does something called constant pool resolution. The process of constant pool resolution for string follows these steps, as taken from the Java Virtual Machine Specification (5.4):

  If another constant pool entry tagged CONSTANT_String2 and representing the identical sequence of Unicode characters has already been resolved, then the result of resolution is a reference to the instance of class String created for that earlier constant pool entry.

2This is used internal to the .class file to identify literals.
  Otherwise, if the method intern has previously been called on an instance of class String containing a sequence of Unicode characters identical to that represented by the constant pool entry, then the result of resolution is a reference to that same instance of class String.
  Otherwise, a new instance of class String is created containing the sequence of Unicode characters represented by the CONSTANT_String entry; that class instance is the result of resolution.

 

String s1 ; String s2=null ; String s3=”” ; String s4=new String(“”) ; 的区别。

Java中String  s1 ;  String  s2=null ;  String  s3=”” ;  String  s4=new String(“”) ; 的区别。 =========...

(转)String和StringBuilder、StringBuffer的区别?

String和StringBuilder、StringBuffer的区别? 答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和...

解析String s="a" 和 String s1=new String("a")生成时,内存中的变化

String s="abc"   s是栈内变量,它的内存保存的是常量池的常量字符串对象对象"abc"的地址。常量池中的每个值只有一份。String s2 = "abc"; s和s2两个变量指向的是...

TCHAR 与 STD::string 之间的若干问题

TCHAR 与 STD::string 之间的若干问题 我经常在 C++ 程序中使用标准模板库(STL)的 std::string 类,但在 使用 Unicode 时...

Java String中若干问题

关于String的若干问题: String中的“==”与equals() 方法: (1)对于String对象使用“==”判定时,其实是判定两个String对象是否为同一String对象的引用; St...

关于c++ find返回值类型 与string::nops的使用的若干问题

假设有这样的字符串“xiaobaizhu\nxiaobaizhu\xiaobaizhu”,我们只想要截取字符串第一行,而其他行不考虑。 原始方法: 通过将find("\n")输出,得到输出内容10,而...

模糊控制工程应用若干问题研究

  • 2015年12月09日 13:21
  • 9.39MB
  • 下载

路灯配电系统若干问题的探讨

  • 2013年12月26日 14:46
  • 295KB
  • 下载

android EditText多行文本输入的若干问题

转载注明地址:http://www.chengxuyuans.com/Android/79282.html 以前习惯了网页以及swing上的文本框输入,现在到Android上突然没有了这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String若干问题
举报原因:
原因补充:

(最多只允许输入30个字)