Jest to pytanie, które powstało głównie z czystej ciekawości (i zabicia czasu). Pytam konkretnie o Javę ze względu na konkretność.Co dzieje się podczas kompilowania i uruchamiania podczas łączenia pustego łańcucha w Javie?
Co dzieje się w pamięci, jeśli złączyć ciąg (dowolny ciąg) z pustym ciągiem znaków, np:
String s = "any old string";
s += "";
wiem, że potem, zawartość s nadal będzie „byle string” , ponieważ pusty ciąg ASCII jest przechowywany w pamięci jako tylko null ASCII (ponieważ, przynajmniej w Javie, łańcuchy znaków są zawsze zakończone znakiem NUL). Ale jestem ciekawy, czy Java (kompilator? VM?) Wykonuje wystarczającą optymalizację, aby wiedzieć, że s będzie niezmieniona, i może po prostu całkowicie pominąć tę instrukcję w bajtowym kodzie, lub jeśli coś się dzieje podczas kompilacji i pracy.
+1 - dla greatjustice – Alex
chłodnym . Dziękuję Ci! –
@mmyers: powinieneś zauważyć, że 1) emitowane kody bajtowe są (teoretycznie) specyficzne dla Java i 2) kompilator JIT mógłby (teoretycznie) zoptymalizować dalej. –