본문 바로가기

TIL

231012_TIL

오늘 한 일

  • 자바 공부
  • 코딩 알고리즘 문제 풀이

오늘한일(회고)

-형변환, 변수의 대해서 자세히 공부 할 수 있었다.

 

문자열을 숫자로(형변환)

- Interger.valueOf()  Integer.parseInt() 이 있다.

-입력된 문자열이 숫자인지 아닌지 먼저 체크를 한 후에 그 문자열을 숫자로 변환하는 것이 정석이다.

 

integer.parseInt()를 써서 문자열을 바꾸는 예시

 

String str = "25";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

 Interger.valueOf()를 써서 문자열을 바꾸는 예시

  String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }

둘의 차이점.

(1) Integer.parseInt()는 결과값을 기본 자료형(Primitive Type)인 int 로 반환합니다. (2) Integer.valueOf()는 문자열의 값을 정수형으로 변환한 뒤 참조 자료형(Reference Type)인 Integer 객체로 만들어서 반환합니다.

 

숫자를 문자열로(형변환)

 

int i = 1234;
String s = String.valueOf(i);     문자열 "1234"로 변환
String s = Integer.toString(i);   문자열 "1234"로 변환
String s = ””+i;                문자열 "1234"로 변환
String s = “”+12.34;            문자열 "12.34"로 변환
String s = “”+0;                문자열 "0"로 변환

문자열 비교법

1. equals()으로 문자열 비교

equals()는 모든 객체의 부모 클래스인 Object에 정의되어있는 메소드입니다. String 클래스는 다음과 같이 equals()를 오버라이드하여 인자로 전달된 String의 문자열을 비교하고 있습니다. 간단히 코드를 보면 == 키워드로 객체가 갖다면 더 확인하지 않고 true를 리턴합니다. 객체가 다른 경우 인자가 String이라면 문자열을 비교하여 동일한지 결과를 리턴해 줍니다.

String str1 = "Hello";
String str2 = "World";
String str3 = "Hello";

System.out.println("str1.equals(str2) : " + str1.equals(str2));
System.out.println("str2.equals(str1) : " + str2.equals(str1));
System.out.println("str1.equals(str3) : " + str1.equals(str3));

대소문자 구분

Objects.equals() 는 문자열을 비교할 때 대소문자도 구분하여 비교합니다. 대소문자를 구분하지 않고 알파벳이 같은지만 보려면 equalsIgnoreCase()를 사용해야 합니다.

 

2. == 를 이용하여 문자열 비교(==을 이용하여 문자열을 비교하면 안됨)

==는 객체가 같은지(객체의 Hashcode)를 비교하지만 객체가 갖고 있는 문자열이 같은지 비교하지 않습니다.

str1과 str2는 모두 동일한 문자열 "Hello"를 가리키기 때문에 같은 object입니다. 하지만 str3는 new String()으로 만든 객체로 이 둘과 다릅니다. System.identityHashCode()는 object의 hashCode를 리턴하는 메소드인데요. 이것을 이용하면 str1과 str3는 문자열은 같지만 서로 다른 객체라는 것을 알 수 있습니다.

 

3. compareTo()를 이용하여 문자열 비교

compareTo()는 두개의 문자열을 비교합니다. 두개의 문자열이 같은지 확인할 수 있는 equals()와 다르게 어떤 문자가 사전적인 순서로 앞에 있는지도 결과 값으로 리턴합니다.

따라서 compareTo()를 이용하면 리스트를 오름차순으로 정렬하거나 내림차순으로 정렬할 수 있습니다.

리턴 값은 0, 음수, 양수의 int가 리턴되며 의미는 다음과 같습니다.

  • 0 : 두개의 문자열이 동일
  • 양수 : compareTo()를 호출하는 객체가 인자보다 사전적으로 순서가 앞설 때
  • 음수 : 인자가 객체보다 사전적으로 순서가 앞설 때
String str1 = "Hello";
String str2 = "Hello";
String str3 = "World";

System.out.println("str1.compareTo(str2) ? " + str1.compareTo(str2));
System.out.println("str1.compareTo(str3) ? " + str1.compareTo(str3));

System.out.println("str1.compareToIgnoreCase(str2) ? " + str1.compareToIgnoreCase(str2));
System.out.println("str1.compareToIgnoreCase(str3) ? " + str1.compareToIgnoreCase(str3));
str1.compareTo(str2) ? 0
str1.compareTo(str3) ? -15
str1.compareToIgnoreCase(str2) ? 0
str1.compareToIgnoreCase(str3) ? -15

str1.compareTo(str3) -15를 리턴한다는 것은 str1이 str3보다 사전적으로 앞에 있다는 의미입니다. 또한, 대소문자를 구분하지 않고 비교하려면 compareToIgnoreCase()를 사용하면 됩니다.

 

느낀점

-저번보다 ==와 equals()의 차이점에 대해 더 자세히 알게되었고, ==는 문자열 비교에 쓸수 없다는 걸 더 확실히 알게 되었다.-자바 공부를 더 열심히 해야겠다.

'TIL' 카테고리의 다른 글

231016_TIL  (0) 2023.10.17
231013_TIL  (0) 2023.10.15
231011_TIL  (0) 2023.10.12
231010_TIL  (0) 2023.10.11
231006_TIL  (0) 2023.10.07