round Half up 에 의해서 -1이 됩니다.
더 큰쪽으로 반올림됨
string 은 참조 데이터 타입으로써 기본 데이터 타입과 유사하게 불변성과 리터럴을 사용한 초기화 방식 때문에 기본 데이터 타입처럼 보이지만 실제로는 참조형입니다.
참조 타입에는 클래스, 인터페이스, 배열등이 있고 String은 클래스
기본 데이터 타입은 한번 저장된 값이 변하지 않는 불변성을 가지고 있는데 String은 기본 데이터 타입이 아니지만 불변성을 가지고 있습니다.
String a = "hi"; a = a + "hello"; // a가 hihello가 된 것이 아니라 새로 생긴 hihello를 a가 가르키게 되는 것. 기존의 a는 사라짐
또한 new 키워드를 사용하지 않고 리터럴을 사용해서 기본 생성자처럼 직접 초기화 할 수 있습니다.
기본 데이터 타입으로는 byte, short, int, long, float, double, char, boolean 등 8가지이며 실제 값을 가지고 고정된 크기를 가지고 스택 메모리에 직접 저장하지만
참조 타입은 객체를 힙 메모리에 저장하고 해당 객체를 가르키는 참조가 스택에 저장됩니다.
문자열을 조작하는 클래스로는 String, Stringbuilder, Stringbuffer가 있습니다.
String은 불변한 객체를 생성해서 문자열을 수정하면 매번 새로운 객체를 생성하기 때문에 멀티 스레드 환경에서 안전하지만 반복적으로 객체를 조작하는 경우에 비효율적입니다.
Stringbuilder는 가변 객체를 생성해주지만 멀티 스레드 환경에서 안전하지 않습니다.
Stringbuffer는 똑같이 가변 객체를 생성해주며 동기화가 되어있어 멀티 스레드 환경에서도 안전합니다.
둘은 동일하지 않습니다.
따옴표를 이용해서 문자를 저장하면 iteral pool에 저장되어 같은 값을 재사용하며 사용할 수 있지만
new 연산자를 통해 생성하면 힙 영역에 매번 새롭게 생성되기 때문에 메모리도 비효율적이고 불변성의 장점을 가지지 못하게 됩니다.
문자열을 반전시키는 가장 좋은 방법은 StringBuilder reverse()메서드를 사용하는 것입니다.
문자열을 직접 반전시켜 효율적이고 간결하게 반전시킬 수 있습니다.