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!
Thanks! Could you tell me what are compile time constants?
Joined: Feb 07, 2005
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.
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.