Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #27877

Re: how actually string store in java machine

From Eric Sosman <esosman@comcast-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: how actually string store in java machine
Date 2014-03-26 13:54 -0400
Organization A noiseless patient Spider
Message-ID <lgv48i$528$1@dont-email.me> (permalink)
References (1 earlier) <lgsflf$pua$1@dont-email.me> <lgslfc$k81$1@news.albasani.net> <lgslj6$k81$2@news.albasani.net> <b9f4j99knq24nqdmi1ultckkm82ecem7v6@4ax.com> <lguruv$1dm$1@dont-email.me>

Show all headers | View raw


On 3/26/2014 11:32 AM, markspace wrote:
> On 3/25/2014 7:37 PM, Roedy Green wrote:
>> On Tue, 25 Mar 2014 20:31:50 +0100, Jan Burse <janburse@fastmail.fm>
>> wrote, quoted or indirectly quoted someone who said :
>>
>>>
>>> http://stackoverflow.com/questions/16690815/shared-constant-pool
>>
>> I was under the impression all string constants lived in the same pool
>> along with the interned strings. That would imply a shared constant
>> pool since day 1.  Have I had this wrong since Java 1.0?
>>
>
>
> Yes, I'm pretty sure you've been wrong if that's what you thought.  Each
> class has its own pool of strings.  If you have a class with a constant
> string:
>
>    String a = "a";
>    String b = "a";
>
> The constant "a" is only stored once, and a==b will be true.  But that's
> only for a single class file.  Outside of the class file, each string is
> unique and a different object.  I don't think any implementations of the
> JVM called String.intern() for each constant string read in each class
> file.

	// Foo.java:
	public class Foo {
	   public static String HELLO = "Hello";
	}

	// FooBar.java:
	public class FooBar {
	   public static void main(String[] unused) {
	      System.out.println("Foo.HELLO == \"Hello\": "
	         + (Foo.HELLO == "Hello"));
	   }
	}

... prints

	Foo.HELLO == "Hello": true

... on my Java 1.7.0_51 system.  You might also want to re-read
Section 3.10.5 of the Java Language Specification; for Java 7 and 8
it reads (in part)

	"Moreover, a string literal always refers to the /same/
	instance of class String. This is because string literals -
	or, more generally, strings that are the values of constant
	expressions (§15.28) - are "interned" so as to share unique
	instances, using the method String.intern."

Java 6 words it a bit differently:

	"String literals-or, more generally, strings that are the
	values of constant expressions (§15.28)-are "interned" so
	as to share unique instances, using the method String.intern."

... and goes on to give a multi-class, multi-package example.

> And certainly if you read a string from a file or the network, the VM
> does not call String.intern() for you.  That would be silly.

     That would be silly, yes.  But the handling of literals is
a different matter, and does not behave as you described.

-- 
Eric Sosman
esosman@comcast-dot-net.invalid

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

how actually string store in java machine Rishipal Singh <95rishipal@gmail.com> - 2014-03-25 09:56 -0700
  Re: how actually string store in java machine Roedy Green <see_website@mindprod.com.invalid> - 2014-03-25 10:32 -0700
  Re: how actually string store in java machine Roedy Green <see_website@mindprod.com.invalid> - 2014-03-25 10:33 -0700
  Re: how actually string store in java machine Jeff Higgins <jeff@invalid.invalid> - 2014-03-25 13:49 -0400
    Re: how actually string store in java machine Jan Burse <janburse@fastmail.fm> - 2014-03-25 20:29 +0100
      Re: how actually string store in java machine Jan Burse <janburse@fastmail.fm> - 2014-03-25 20:31 +0100
        Re: how actually string store in java machine Roedy Green <see_website@mindprod.com.invalid> - 2014-03-25 19:37 -0700
          Re: how actually string store in java machine Jan Burse <janburse@fastmail.fm> - 2014-03-26 09:03 +0100
            Re: how actually string store in java machine Jan Burse <janburse@fastmail.fm> - 2014-03-26 09:11 +0100
            Re: how actually string store in java machine Jan Burse <janburse@fastmail.fm> - 2014-03-27 10:27 +0100
          Re: how actually string store in java machine markspace <markspace@nospam.nospam> - 2014-03-26 08:32 -0700
            Re: how actually string store in java machine Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-03-26 13:54 -0400
              Re: how actually string store in java machine taqmcg@gmail.com - 2014-03-26 12:57 -0700
              Re: how actually string store in java machine markspace <markspace@nospam.nospam> - 2014-03-26 16:37 -0700
                Re: how actually string store in java machine Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-03-27 08:54 -0400
                Re: how actually string store in java machine taqmcg@gmail.com - 2014-03-27 08:23 -0700
                Re: how actually string store in java machine Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-03-27 11:50 -0400
                Re: how actually string store in java machine taqmcg@gmail.com - 2014-03-28 06:58 -0700
                Re: how actually string store in java machine Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-03-28 11:02 -0400
                Re: how actually string store in java machine taqmcg@gmail.com - 2014-04-02 05:47 -0700
                Re: how actually string store in java machine Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-04-02 10:15 -0400
                Re: how actually string store in java machine taqmcg@gmail.com - 2014-04-03 08:58 -0700
            Re: how actually string store in java machine Roedy Green <see_website@mindprod.com.invalid> - 2014-03-26 17:07 -0700
      Re: how actually string store in java machine Jeff Higgins <jeff@invalid.invalid> - 2014-03-25 16:07 -0400
        Re: how actually string store in java machine Jeff Higgins <jeff@invalid.invalid> - 2014-03-25 16:16 -0400
          Re: how actually string store in java machine Jeff Higgins <jeff@invalid.invalid> - 2014-03-25 16:19 -0400
            Re: how actually string store in java machine markspace <markspace@nospam.nospam> - 2014-03-25 14:00 -0700
              Re: how actually string store in java machine Jeff Higgins <jeff@invalid.invalid> - 2014-03-25 17:21 -0400
                Re: how actually string store in java machine Jeff Higgins <jeff@invalid.invalid> - 2014-03-26 11:40 -0400
                Re: how actually string store in java machine Roedy Green <see_website@mindprod.com.invalid> - 2014-03-26 17:46 -0700
  Re: how actually string store in java machine Lew <lewbloch@gmail.com> - 2014-03-25 15:07 -0700

csiph-web