Разработчики Java решили сохранить примитивные типы в объектно-ориентированном языке, вместо того чтобы сделать все объектом, чтобы улучшить работу языка. Примитивы хранятся в стеке вызовов, которые требуют меньше пространства для хранения и дешевле манипулировать. С другой стороны, объекты хранятся в куче программ, которые требуют сложного управления памятью и большего объема пространства для хранения.
По соображениям производительности, строка Java предназначена для того, чтобы находиться между примитивным и классом.
blockquote>Например,
String s1 = "Hello"; // String literal String s2 = "Hello"; // String literal String s3 = s1; // same reference String s4 = new String("Hello"); // String object String s5 = new String("Hello"); // String object
[/g2]
Примечание: Строковые литералы сохраняются в общий пул. Это облегчает совместное использование хранилищ для строк с одним и тем же содержимым для сохранения хранилища.
String
объекты, выделенные новым оператором, хранятся вheap
, и нет совместного использования хранилища для того же содержимого.