Two Laptop Bag*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes String class - Is this statement correct? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "String class - Is this statement correct?" Watch "String class - Is this statement correct?" New topic
Author

String class - Is this statement correct?

Faisal Ahmad
Ranch Hand

Joined: Aug 31, 2006
Posts: 355

When the compiler encounters a String literal, it checks the pool to see if an identical String already exists. [pp 420, KB]

Are the String literals assigned at compile time? String literals/objects stay on the heap, right? Then, how does the compiler sees those literals/objects and assigns them at compile time? I think, JVM takes care of such things.
Please help me understand. Thanks in advance!
Keith Lynn
Ranch Hand

Joined: Feb 07, 2005
Posts: 2367
String literals are compile-time constants.
Faisal Ahmad
Ranch Hand

Joined: Aug 31, 2006
Posts: 355

Thanks!
Could you tell me what are compile time constants?
Keith Lynn
Ranch Hand

Joined: Feb 07, 2005
Posts: 2367
This is from the Java Language Specification 15.28.

A compile-time constant expression is an expression denoting a value of primitive type or a String that does not complete abruptly and is composed using only the following:

* Literals of primitive type and literals of type String (�3.10.5)
* Casts to primitive types and casts to type String
* The unary operators +, -, ~, and ! (but not ++ or --)
* The multiplicative operators *, /, and %
* The additive operators + and -
* The shift operators <<, >>, and >>>
* The relational operators <, <=, >, and >= (but not instanceof)
* The equality operators == and !=
* The bitwise and logical operators &, ^, and |
* The conditional-and operator && and the conditional-or operator ||
* The ternary conditional operator ? :
* Parenthesized expressions whose contained expression is a constant expression.
* Simple names that refer to constant variables (�4.12.4).
* Qualified names of the form TypeName . Identifier that refer to constant variables (�4.12.4).

Compile-time constant expressions are used in case labels in switch statements (�14.11) and have a special significance for assignment conversion (�5.2). Compile-time constants of type String are always "interned" so as to share unique instances, using the method String.intern.

A compile-time constant expression is always treated as FP-strict (�15.4), even if it occurs in a context where a non-constant expression would not be considered to be FP-strict.
Faisal Ahmad
Ranch Hand

Joined: Aug 31, 2006
Posts: 355

wow!! thats huge for me!
well, ive now got some understanding and here it follows:
constants whose values are known at compile time are called compile time constants. i think these are static and final. now i wonder, are string literals too static and final?

the other one - load time constants. their values are known at run time. these too are static and final.
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Originally posted by Faisal Pasha:
...compile time constants. i think these are static and final...

I think you might want to re-think this.


"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: String class - Is this statement correct?