다음 조건을 만족하는 클래스 Person을 구현하여 테스트하는 프로그램을 작성하시오.(필수) ⭐️
- 클래스 Person은 이름을 저장하는 필드 구성 - 클래스 Person은 상위 클래스 Object의 메소드 equals()를 오버라이딩하여 이름이 같으면 true를 반환하는 메소드 구현 - 다음과 같은 소스로 클래스 Person을 점검
Person p1 = new Person("홍길동"); System.out.println(p1.equals(new Person("홍길동"))); System.out.println(p1.equals(new Person("최명태")));
public class IAmPerson {
public static void main(String[] args) {
Person p1 = new Person("홍길동");
System.out.println(p1.equals(new Person("홍길동")));
System.out.println(p1.equals(new Person("최명태")));
}
}
class Person {
private String name;
public Person (String name) {
this.name = name;
}
@Override
public boolean equals (Object obj) {
if (this.name == ((Person)obj).name) {
return true;
} else {
return false;
}
}
}
아래를 참고하여, 메소드 equals()와 연산자 == 의 차이를 비교 설명하시오.(필수) ⭐️
public static void main(String[] args) { String s1 = new String("java"); String s2 = new String("java"); String s3 = s2; ` System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(s2 == s3); System.out.println(s2.equals(s3)); ` if(s1 == s2) System.out.println("s1, s2 참조 대상 같다."); else System.out.println("s1, s2 참조 대상 다르다. "); ` if(s2 == s3) System.out.println("s2, s3 참조 대상 같다."); else System.out.println("s2, s3 참조 대상 다르다. "); ` if(s1.equals(s2)) System.out.println("s1, s2 내용 동일하다."); else System.out.println("s1, s2 내용 다르다."); ` if(s2.equals(s3)) System.out.println("s2, s3 내용 동일하다."); else System.out.println("s2, s3 내용 다르다."
[ == ]
참조형은 주소값을 갖기 때문에 그 값을 비교하는 반면
[ equals ]
는 그 내용을 비교한다.
아래의 결과 값은 false 출력이 된다. true 가 되도록 INum을짜시오.
INum[] ar1 = new INum[3]; INum[] ar2 = new INum[3]; ` ar1[0] = new INum(1); ar2[0] = new INum(1); ar1[1] = new INum(2); ar2[1] = new INum(2); ar1[2] = new INum(3); ar2[2] = new INum(3); ` System.out.println(Arrays.equals(ar1, ar2));
import java.util.Arrays;
public class INumMain{
public static void main(String[] args) {
INum[] ar1 = new INum[3];
INum[] ar2 = new INum[3];
ar1[0] = new INum(1); ar2[0] = new INum(1);
ar1[1] = new INum(2); ar2[1] = new INum(2);
ar1[2] = new INum(3); ar2[2] = new INum(3);
System.out.println(Arrays.equals(ar1, ar2));
}
}
class INum {
private int num;
public INum(int num) {
this.num = num;
}
@Override
public boolean equals(Object obj) {
if(this.num == ((INum)obj).num)
return true;
else
return false;
}
}
Java 1.5 부터 나온 개념으로, Generic이 나오기 전까지는 참조형 변수 타입을 Object로 받을 수 밖에 없었다.
자료형을 결정짓지 않고 틀을 만들어 두는 것을 말함
Object(참조형 타입) 자리에 T들어감 → Generic
그래서 자료형의 정보를 Object 대신 T로 작성해 비워 두고 인스턴스 생성시 참조 타입을 결정함
오류의 발견
최대한 컴파일 과정에서 오류가 발견될 수 있도록 코드를 짜는 것이 좋은 것
아래가 돌아 가도록 DBox를 완성 하시오.
public static void main(String[] args) { DBox<String, Integer> box = new DBox<String, Integer>(); box.set("Apple", 25); System.out.println(box); }
public class IAmDBox {
public static void main(String[] args) {
DBox<String, Integer> box = new DBox<String, Integer>();
box.set("Apple", 25);
System.out.println(box);
}
}
class DBox<Str, Integer> {
Str fruit;
Integer m;
public void set(Str fruit, Integer m) {
this.fruit = fruit;
this.m = m;
}
public String toString() {
return fruit+ " "+m;
}
}