즐거운 자바 15 ~ 18 강
15강 Object와 String 클래스
Object클래스의 기본 메소드에는 자주 쓰이는 대표 3가지 메소드(1.toString() 2.equals() 3.hashCode() ) 가 있다. 이들을 자주 쓰는 이유는 기준을 정하는 메소드 이기 때문이다. 같은지 다른지를 알기위해서는 기준이 필요하기 때문이다. 이들은 모든 클래스의 1대 조상인 Object의 메소드로서 Overriding을 해서 쓴다.
1.toString() 메소드는 말 그대로 객체가 가지고 있는 값을 문자열로 바꿔서 변환해준다.
2.equals() 메소드는 같은 문자열인지 같은 값인지를 비교해주는 메소드이다. ==이 같은 객체를 참조하는지를 알려주는 것과 비슷하면서 다르다.
3.hashCode() 메소드는 hashMap, hashSet 같은 자료구조에서 값을 비교할 때 쓴다. 강의의 설명으로는 hash가 앞에 붙어있는 api를 쓸 때 하나 씩 불러오는 것들의 hashcode()가 다 다른값이어서 비교하기 용이해서 쓴다고 했다.
String 클래스는 불변 클래스이다. 한번 생성되면 값이 어떤 경우에도 변하지 않는다. 굳이 같은 문자열의 값을 가진 String 인스턴스를 많이 생성하고 싶으면 원래 객체를 생성하는 방식 처럼 String str = new String("굳이");라고 변수명을 다르게 여러개 만들어주면 된다. 하지만 굳이 메모리를 여러개 쓸 필요가 없기 때문에 String str=""; 의 방식으로 쓰는 것이 가장 합리적이다.
String클래스의 메소드인 subString을 써도 만들어진 객체가 변하는 것이 아니라 새로운 객체를 만들어서 보여주는 것이라 값이 변하지 않는다.
public class Stringtest {
public static void main(String args[]){
String str = "hello" + "world";
System.out.println(str);
String str3 = new StringBuffer().append("hello").append("world").toString();
System.out.println(str3);
long start1 = System.nanoTime();// 1초 1000000
String str2 = "";
for(int i = 0;i <100; i++){
str2 = str2 + "";
}
long end1 = System.nanoTime();
System.out.println(end1 - start1);//117428 1초에 1000000
long start2 = System.nanoTime();
StringBuffer sb = new StringBuffer();
for(int i=0; i<100; i++){
sb.append("*");
}
long end2 = System.nanoTime();
System.out.println(end2 - start2);//81558
}
}
웹 개발이나 서버 개발을 할 때 String 보다 StrinBuffer나 StringBuilder를 자주 쓰는 이유는 위에 StringTest에 나온 것 처럼 불러올 때의 시간이 더 빠르다. 문자열이 웹에서는 굉장히 자주 쓰일 것이기 때문에 이런 시간은 중요하다.
'Java' 카테고리의 다른 글
Day 7. 정렬 (0) | 2018.12.14 |
---|---|
Day 7. 과제(JAVA IO) (0) | 2018.12.12 |
Day 6. Java 로또 프로그램(객체지향) (0) | 2018.12.12 |
Day 6. file, folder 관계와 컴포시트 패턴 (0) | 2018.12.12 |
Day 5. Collection framework(자료구조) (0) | 2018.12.10 |