11) 문자열과 기본형 간의 변환
- 숫자를 문자열로 바꾸는 방법
ex)
int i = 100;
String str1 = i + ""; // 100을 "100"으로 변환하는 방법1 -> 편리,간단
String str2 = String.valueOf(i); // 100을 "100"으로 변환하는 방법2 -> 처리속도가 빠름
- 문자열을 숫자로 바꾸는 방법
ex)
int i = Integer.parseInt("100"); // "100" 을 100으로 변환하는 방법1
int i2 = Integer.valueOf("100"); // "100" 을 100으로 변환하는 방법2
Integer i2 = Integer.valueOf("100"); // 원래는 반환 타입이 Integer
12) StringBuffer 클래스
- String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.
public final class StringBuffer implements java.ol.Serializable {
private char[] value;
}
- 그러나 String(변경불가)과 달리 내용을 변경할 수 있다. (mutable)
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
13) StringBuffer의 생성자
- 배열은 길이 변경불가. 공간이 부족하면 새로운 배열생성해야
ex) 1. 새로운 배열생성(보통 두배 크기로 생성)
2. 내용 복사
3. 참조 변경
- StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야
14) StringBuffer의 변경
- StringBuffer는 String과 달리 내용 변경이 가능하다.
- append()는 지정된 내용을 StringBuffer에 추가 후 StringBuffer의 참조를 반환
15) StringBuffer의 비교
- StringBuffer는 equals()가 오버라이딩되어있지 않다.(주소비교)
- StringBuffer을 String으로 변환 후에 equals()로 비교해야 한다.
ex)
String s = sb.toString(); // sb를 String으로 변환
String s2 = sb2.toString();
System.out.println(s.equals(s2)); // true
16) StringBuilder -> 동기화 X , 싱글쓰레드에 사용 적합
- StringBuffer는 동기화되어 있다. 멀티쓰레드에 안전(thread-safe)
- 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하 이럴 땐
StringBuffer대신 StringBuilder를 사용하면 성능 향상
17) Math 클래스
- 수학관련 static메서드의 집합
- round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기
ex) 1. 원래 값에 100을 곱한다.
90.7552 * 100 -> 9075.52
2. 위의 결과에 Math.round()를 사용한다.
Math.round(9074.52) -> 9076
3. 위의 결과를 다시 100.0으로 나눈다.
9076 / 100/0 -> 90/76
9076/ 100 -> 90
18) 래퍼(wrapper) 클래스
- 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스 (기본형은 객체가 아니기 때문에)
pubilc final class Integer extends Number implenments Comparable {
private int value;
}
- 기본형: boolean, char , byte, short, int , long, float, double
- 래퍼클래스: Boolean, Character, Byte , Short , Integer , Long , Float , Double
ex)
char -> Character
생성자 : Character(char value) , 활용 예: Character c = new Character('a');
int -> Integer
생성자: Integer(int value), Integer(String s), 활용 예: Integer i = new Integer(100); , Integer i2 = new Integer("100");
- 모든 숫자 래퍼 클래스의 조상.
19) 문자열을 숫자로 변환하기
- 문자열을 숫자로 변환하는 다양한 방법
ex)
int i = new Integer("100").intValue(); // floatValue(), longValue(), ...
int i2 = new Integer.parsInt("100"); // 주로 이 방법을 많이 사용.
Integer i3 = Integer.valueOf("100");
ex)
문자열 -> 기본형
: byte b = Byte.parseByte("100");
short s = Short.parseShort("100");
int i = Integer.parseInt("100");
float f = Float.parseFloat("3.14");
문자열 -> 래퍼 클래스
Byte b = Byte.valueOf("100");
Short s = Short.valueOf("100");
Integer i = Integer.valueOf("100");
Float f = Float.valueOf("3.14");
- n진법의 문자열을 숫자로 변환하는 방법
int i4 = Integer.parseInt("100",2); // 100(2) -> 4
int i5 = Integer.parseInt("100",8); // 100(8) -> 64
int i6 = Integer.parseInt("100",16); // 100(16) -> 256
int i7 = Integer.parseInt("FF",16); // FF(16) -> 255
// int i8 = Integer.parseInt("FF"); // NumberFormatException 발생
20) 오토박싱 & 언박싱
- JDK1.5 이전에는 기본형과 참조형간의 연산이 불가능
ex)
int i =5;
Integer iObj = new Integer(7);
int sum = i + iObj; // 에러(JDK1.5 이전) 기본형과 참조형 간의 덧셈 불가
컴파일 전의 코드
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj;
컴파일 후의 코드
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj.intValue();
- 기본형의 값을 객체로 자동변환하는 것을 오토박싱, 그 반대는 언박싱
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10); // 오토박싱 10 -> new Integer(10)
int value = list.get(0); // 언박싱. new Integer(10)
'JAVA' 카테고리의 다른 글
JAVA #19 메서드 호출, return 문 (0) | 2021.06.20 |
---|---|
JAVA #18 객체의 생성과 사용 (0) | 2021.06.20 |
java #16 Object 클래스 총 정리1 (equals(), hashCode(), to String(), join() , StringJoiner) (0) | 2021.05.24 |
java #15 와일드 카드, 지네릭 메서드 (0) | 2021.05.23 |
java #14 쓰레드 총 정리 2 (데몬 쓰레드, 쓰레드 동기화) (0) | 2021.05.22 |