最近Javaを勉強しはじめて、C/C++の知識があったので
基本データ型以外の変数は全て参照型ということで納得していたのですが、
String a = "aaa";
String b = "aaa";
でa==bがtrueになったり、
b = a.substring(1);
だとa==bがfalseで
b = a.substring(0);
だとa==bがtrueだったりするのが不自然に思えました。
これは書き換えを行わないという前提のStringクラスだけの特別な仕様で
一つの文字列につき一つのStringインスタンスしか作らないような仕組みになってるんですか?