String Class in Java
1)Unlike C and C++, String in Java doesn't terminate with
null character.
Instead String are Object in Java and backed by character
array. You can get the character array used to represent String in Java by
calling toCharArray() method of java.lang.String class of JDK.
2)Strings are immutable and final in Java
3)All String literal e.g. "abc" (anything which is inside double quotes are
String literal in Java) are maintained in a separate String pool, special
memory location inside Java memory, more precisely inside PermGen Space. Any
time you create a new String object using String literal, JVM first checks
String pool and if an object with similar content available, than it returns
that and doesn't create a new object. JVM doesn't perform String pool check if
you create object using new operator.
4)By default Java puts all string literal into string pool,
but you can also put any string into pool by calling intern() method of
java.lang.String class, like string created using new() operator.
5)Use indexOf() and lastIndexOf() or matches(String regex)
method to search inside String
6)If trim() removes white spaces it returns a new String otherwise
it returns same String.
7)Use SubString to get part of String in Java
8)Don't store sensitive data in String
Since String is immutable in Java there is no way you can
erase contents of String and since they are kept in String pool (in case of
String literal) they stay longer on Java heap ,which exposes risk of being seen
by anyone who has access to Java memory, like reading from memory dump.
9)Why character array is better than String for storing
password in Java
Since Strings are immutable in Java if you store password as
plain text it will be available in memory until Garbage collector clears it and
since String are used in String pool for reusability there is pretty high
chance that it will be remain in memory for long duration, which pose a
security threat. Since any one who has access to memory dump can find the
password in clear text and that's another reason you should always used an
encrypted password than plain text. Since Strings are immutable there is no way
contents of Strings can be changed because any change will produce new String,
while if you char[] you can still set all his element as blank or zero. So
Storing password in character array clearly mitigates security risk of stealing
password.
No comments:
Post a Comment