• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Liutauras Vilda
  • Jeanne Boyarsky
  • Devaka Cooray
  • Paul Clapham
Sheriffs:
  • Tim Cooke
  • Knute Snortum
  • Bear Bibeault
Saloon Keepers:
  • Ron McLeod
  • Tim Moores
  • Stephan van Hulst
  • Piet Souris
  • Ganesh Patekar
Bartenders:
  • Frits Walraven
  • Carey Brown
  • Tim Holloway

Java String Question

 
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I was just looking at the source code of java.lang.String in JDK 1.5 version and I noticed that the character array in which the actual string gets created is a 'final' variable. However, this 'final' variable is NOT initialized.(so are other private final members of the String class)

How will the compiler compile this code without throwing an error?

(Until JDK 1.5, these member variables were non-final variables, which means Strings are mutable using reflection technique. But since JDK 1.5, Sun has rectified this problem.)
 
author
Posts: 23834
140
jQuery Eclipse IDE Firefox Browser VI Editor C++ Chrome Java Linux Windows
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I don't know exactly how it works with Java 5 -- but with Java 1.4... I believe that final instance variables that are not set by initializer, are allowed to be set *once* in the constructor.

Henry
[ February 17, 2006: Message edited by: Henry Wong ]
 
Ranch Hand
Posts: 1608
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator


However, this 'final' variable is NOT initialized.


This is a false premise - it is indeed initialized.
The question now becomes, what makes you think it isn't?
 
Md Fizal
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This is what I see in String.java source code (JDK 1.5)

 
Ranch Hand
Posts: 2410
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Are you talking about after the line in the constructor where it's set to an array of 0 characters? arrays of primitives are initialized to their default values.
[ February 20, 2006: Message edited by: Keith Lynn ]
 
Md Fizal
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Variable 'value' is a final variable. How are they able to overwriting it's value by saying "value=new char[0];"
 
Keith Lynn
Ranch Hand
Posts: 2410
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This is from the Java Language Specification.

A blank final instance variable must be definitely assigned (�16.8) at the end of every constructor (�8.8) of the class in which it is declared; otherwise a compile-time error occurs.
 
Md Fizal
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This is exactly I was looking for. Thanks Keith.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!