Persze, én sem a belső tárolást értem alatta. Az alapkérdés az, hogy mi a "String" objektum API-ja. Például a Java String objektum char (16 bit) típusú tömbként kezeli lényegében a stringet. Viszont vannak karakterek, amik nem férnek el a 16 bites char típusban. Ezért kellene a char típusnak 32 bitesnek lennie, ha el akarnánk kerülni a kivételek lekezelését a programokban.
Persze a legtöbb program soha nem találkozik olyan karakterrel, ami nincs benne a 16 bitben, de elvileg még léteznek. És éppen ezért tuti, hogy ezekre a karakterekre a Java programok jelentős része dobna egy hátast. Ugye én még tesztesetet is nehezen raknék össze.
Például mostanában túrtam a lanterna nevű Java könyvtárat, és találkoztam ilyen széles karakterek kezelése miatti extra függvényekkel a kódban. És bele akartam volna nyúlni a működésbe, de ezeket egyrészt nem is értettem, másrészt pedig nem tudtam még kipróbálni sem, hogy jól írtam-e át. A "megoldás" az lett, hogy kiszedtem a széles karakterkezelést mondván, hogy nekem nem kell, és így egyszerűen beletettem a libbe amit akartam. Viszont így a végeredményt nem tudom visszaosztani az eredeti projektnek, mert a kínaiak regressziót kapnának a nyakukba.
De a belső tárolás sem teljesen mindegy. Ha UTF-8-ban tárolod benn, de helyesen értelmezed az unicode karaktereket, akkor a legegyszerűbb string műveleteidnek is végig kell nyálaznia a teljes stringet. Például egy mystring.substring(1000, 1002) futási ideje az 1000-rel fog skálázódni a 2 helyett. ( http://www.joelonsoftware.com/articles/LeakyAbstractions.html ) Ha viszont UTF-32-ben tárolod, akkor a substring skálázódása ideális lesz. Cserébe 4X annyi memóriát használsz egy string tárolásakor.
Plusz, ha megnézel egy unicode konverziós kódot, akkor láthatod, hogy rohadt bonyolult, nem az a fajta cucc, amit egy nyelv core-jában látni szeretnél. Odabenn rendnek kell lenni, ilyen bonyolult, nehezen validálható vacakoknak nincs helye :-). De ez már filozófiai kérdés.
Eleve garbage kollektoros nyelvet terveztem, nem a mikrokontrollerek világa volt a cél. Mikrokontrolleren UTF-8-as stringeket kezelni... Mondjuk úgy, hogy nem vágyom rá. (Bár a magyar ékezetes karaktereket már nyomtattam mikrokontrollerről. De csak azt a 2*8-at valósítottam meg egy nagy switch-case-ben, ami nekem kellett.)