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和StringBuilder、StringBuffer的区别?

String和StringBuilder、StringBuffer的区别? 答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和...
  • wyh466340218
  • wyh466340218
  • 2016年01月27日 13:44
  • 612

String s = new String("xyz");创建了几个String Object?

转载:http://rednaxelafx.iteye.com/blog/774673 问题: Java代码   String s = new String("xyz...
  • NiluChen
  • NiluChen
  • 2012年10月08日 15:46
  • 10709

String s1="AB"和String s2=new String("AB")的区别

首先,String对象是final修饰的常量,是不可改变的字符串 当String对象创建完毕后,该对象的内容不可以改变的,一旦内容改变就会创建一个新的对象如下图一旦s1的值改变了,s1对象的hash...
  • situliang
  • situliang
  • 2017年02月08日 23:45
  • 480

String s1 = new String("abc")和String s2 = "abc"的区别

今天在看JVM的时候突然想到这样一个问题,即String s1 = new String("abc"); String s2 = "abc";System.out.println(s1 == s2);...
  • zdavb
  • zdavb
  • 2016年07月18日 22:50
  • 3095

由vfork()结合exit()想到的若干问题

问题来源看coolshell的一篇文章,先看代码:#include #include #include int main(void) { int var; var = 88; ...
  • u011117467
  • u011117467
  • 2015年04月19日 16:21
  • 350

Java String中若干问题

关于String的若干问题: String中的“==”与equals() 方法: (1)对于String对象使用“==”判定时,其实是判定两个String对象是否为同一String对象的引用; St...
  • u012585795
  • u012585795
  • 2015年10月25日 13:15
  • 360

String s2 = "abc"; 与 String s3 = new String("abc");原理解析

package testwebapp; public class Test { //大家思考一下输出结果是什么? public static void main(String[] a...
  • wangzuojia001
  • wangzuojia001
  • 2017年01月03日 17:29
  • 488

leetcode_动态规划

 昨上做了一道题,原题来自LeetCode,由“待字闺中”微信公众号转发。这道题实际上我自己没有想出好的解法来,而是最后看了答案,对我来说是首次理解了这种类型的动态规划的解法。 以下是链接: ...
  • r_mosaic
  • r_mosaic
  • 2014年10月19日 13:37
  • 914

Fresh.Software.Warden.v1.1

网站帐户管理软件和.htpasswd生成器,适用于兼容Apache的网络服务器,只需几步就可完成新用户的密码创建并给用户发送通知邮件。包含注册机。 ...
  • hu_zhenghui
  • hu_zhenghui
  • 2007年06月22日 09:04
  • 542

Crinkler v1.1

 IntroductionCrinkler is an executable file compressor (or rather, a compressing linker) for Windows...
  • linhanshi
  • linhanshi
  • 2008年01月13日 13:50
  • 511
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String若干问题
举报原因:
原因补充:

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