public boolean equals(Object obj)
Obj가 이 객체와 같으면 true
Circle c1 = new Circle(10);
Circle c2 = new Circle(10);
if (c1 == c2){
System.out.printf("Same");
} else{
System.out.println("Different");
}
Java
복사
ERROR 가 나지 않고 Different를 출력한다
object들을 ==로 비교하면 주소값을 비교한다
특정한 속성을 비교하고 싶다면 equals method를 만들어 줘야한다
class Circle {
private int radius;
public Circle(int radius) {
this.radius = radius;
}
// to access the private variable
public int getRadius() {
return radius;
}
public boolean equals(Circle c){
return this.radius == c.getRadius();
}
}
public class CircleTest{
....
if (c1.equals(c2)){
System.out.printf("두개의 원은 같습니다");
} else{
System.out.println("두개의 원은 다릅니다");
}
}
Java
복사
radius가 같으면 true를 return하는 equals method를 만듦
Overriding Object class’ method
@Override
public boolean equals(Object obj) {
if( obj instanceof Circle2) { // 원하는 객체라면
Circle2 c1 = (Circle2) obj; // Object를 해당 instance로 다운캐스팅
if( this.radius == c1.getRadius()) {
return true;
}else {
return false;
}
}
Java
복사
모든 객체 타입으로 받을 수 있다
Object가 최고 조상
String
toString()
public static String valueOf (Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Object obj = null;
sout(obj); --> null
sout(num1) -->
public static void main(String[] args) {
String s1 = "java";
String s2 = "java";
String s3 = new String("java");
String s4 = new String("java");
if (s1 == s2) {
System.out.println("Same");
} else{
System.out.println("Different");
}
//같습니다
if (s3 == s4) {
System.out.println("Same");
} else{
System.out.println("Different");
}
// 다릅니다
}
Java
복사
리터럴은 한번 메모리에 올라가게 되면 같은 값을 사용하는 상수는 그 주소로 point한다
문자열 안에서 단어 찾기
indexOf - substring이 시작되는 index를 return
String str ="hello";
intindex = str.indexOf("hello");
System.out.println(index);
Java
복사
output: 0
.trim()
String의 양끝에 있는 공백을 없앤다
String str = " I love you ";
System.out.println(str.trim());
Java
복사
⇒I love you
.split()
parameter: 무엇으로 split할 것인지
String[] words = "I am a boy".split(" ");
for (String token: words) {
System.out.println(token);
}
String[] words = "I am a boy".split(" ");
for (String token: words) {
System.out.println(token);
}
연습문제
try and catch string.split(" ")
Scanner sc = new Scanner(System.in);
while (true) {
try {
System.out.printf("");
System.out.println(">>");
String str = sc.nextLine();
if(str.equals("그만")){
System.out.println("프로그램을 종료합니다");
break;
}
String arr = str.split(" ");
System.out.println("어절 개수: " + arr.length);
} catch (Exception e) {
e.printStackTrace();
System.out.println("다시 입력해 주세요");
continue;
}
}
Java
복사
.valueOf()
parameter의 타입을 String으로 바꾼다
String Buffer/Builder
궁금한 것
1.
static method안에는 static method만 사용가능
static 키워드가 붙으면 JVM이 제일 먼저 메모리를 할당해줍니다.
static이 아닌 method를 static method에서 호출하려고 하면 컴파일 오류가 납니다. 그 이유는 static method는 이미 JVM이 먼저 메모리를 할당해줬는데 호출하려는 메서드는 메모리에 올라가있지도 않기 때문입니다. (호출하고 싶다면 객체화 필수)
따라서 static method안에서는 메모리에 올라가는 시점이 동일한 static method만 사용할 수 있습니다!
2.
아래에는 true가 나오는데 while(sc.nextLine != “그만”)을 했을 때 그만을 입력 받아도 while문이 계속되는 이유
==는 문자열(내용)이 아닌 주소를 비교하는 연산자입니다! 따라서 주소값이 같지 않으면 while문 계속 돌아갑니다.