String 클래스의 equals()는
상위클래스인 object의 equals를 재정의한 메서드이다.
equals () 는 두 값 자체를 비교한다. 같으면 true, 틀리면 false를 리턴한다.
public void compareToCheck(){
String text ="a";
String text00 ="a";
String text01 = new String("a");
System.out.println(text.equals(text00));
System.out.println(text00.equals(text01));
if(text00 ==text01){
System.out.println("text00 ==text01");
} else{
System.out.println("text00 !=text01");
}
}
이렇게 equals 메소드를 이용해 비교했을 때는 모두 같다고 나오지만
== 연산자로 비교시에는 객체의 주소를 비교한다.
그결과 다르게 나오는 이유는 자바에서 Constant pool을 이용해서 이다.
상수값을 모아둔 pool이다. String 클래스는 불변의 immutable한 특징이 있다. 그래서 String클래스를 new 연산자를 이용해 새로운 객체를 생성하지 않는 이상, 리터럴 "" 문자 그대로의 값은 기존 상수값 메모리에 재활용된다.
(text가 text00으로 대체되고 text는 가비지 콜렉터가 처리할 대상이된다. )
출처:
https://jiwondev.tistory.com/114
자바의 String과 Constant Pool
JVM에 관하여 #1. JVM 운영체제와 하드웨어에 독립적인 언어, 1995년 당시 이 개념은 프로그래밍의 혁신이었다. 참고로 자바는 썬 마이크로시스템스가 개발했지만 JVM 명세(Specification)만 따른다면 누
jiwondev.tistory.com
compareTo는 정렬할 때 사용한다.
compareTo 매개변수로 넘겨준 String 객체가 알파벳 순으로 앞에 있으면 양수, 뒤에 있으면 음수를 리턴한다. 그리고 알파벳 순서만큼 그 숫자값은 커진다.
public void compareToCheck(){
String text ="a";
String text2 ="b";
String text3 = "c";
System.out.println(text2.compareTo(text));
System.out.println(text2.compareTo(text3));
System.out.println(text.compareTo(text3));
}
예시)
value.compareTo(target)
1.compareTo(1):0
기존보다 target이 앞에 있는 숫자면 앞에 있는 숫자 만큼 1
2.compareTo(1):1
3.compareTo(2):1
기존보다 target이 앞에 있는 숫자면 뒤에 있는 만큼 -1
2.compareTo(3):-1
-- 문자도 마찬가지 알파벳으로 정렬했을 때 기준으로 비교된다.
tempT:c
valueT:b
tempT.compareTo(valueT):1
tempT:a
valueT:c
tempT.compareTo(valueT):-2
compareTo<T> 인터페이스를 이용한 최대값, 최소값 구하는 코드
package GodOfJava.src.main.java.d.generic.practice;
//제네릭을 이용해라
public class MaxFinder {
public static void main(String[] args) {
MaxFinder maxFinder = new MaxFinder();
maxFinder.testGetMax();
}
public void testGetMax(){
System.out.println(getMax(1,2,3));
System.out.println(getMax(3,1,2));
System.out.println(getMax("a","b","c"));
System.out.println(getMax("b","c","a"));
System.out.println(getMax("a","b","c"));
System.out.println(getMin(1,2,3));
System.out.println(getMin(3,1,2));
System.out.println(getMin("a","b","c"));
System.out.println(getMin("b","c","a"));
System.out.println(getMin("a","b","c"));
}
public <T extends Comparable<T>> T getMax(T ... a){
T maxT = a[0];
System.out.println("maxT:"+maxT);
for (T tempT : a){
if(tempT.compareTo(maxT) >0) maxT = tempT;
}
return maxT;
}
public <T extends Comparable<T>> T getMin(T ... a){
T minT = a[0];
for (T minA : a){
if (minA.compareTo(minT) < 0) {
minT = minA;
}
}
return minT;
}
}
'자바' 카테고리의 다른 글
헷갈리는 "병렬 처리" 용어 정리(멀티코어, 멀티스레드) (0) | 2023.10.05 |
---|---|
컬렉션이란? 컬렉션 프레임워크 종류 (List, Set, Map) (0) | 2023.09.17 |
인터페이스와 추상 클래스의 차이 (+왜 인터페이스의 변수는 static final로 선언될까 ? ) (0) | 2023.09.13 |
static 남발하면 안되는 이유 (0) | 2023.09.13 |
자바 4장을 마치며 인스턴스 변수와 클래스 변수의 차이를 알자~ (0) | 2023.08.30 |