==와 !=로 비교할 수도 있지만,
이것은 데이터 주소를 비교하여 동일한 객체인지 검사 하는 것이기 때문에 문자열을 비교할 때에는 equals메소드나 compareTo 메소드를 사용한다.
public class StringEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "Hello";
String b = "Java";
String c = "Hello"; // a를 참조시켜버림
//(똑같은 문자가 있어서 만들지않고)
String d = new String("Hello"); // new를 썼기 땜에 a와는 다름
String e = new String("Java");
String f = new String("Java");
System.out.println(a==c); // true
System.out.println(a==d); //false
System.out.println(a.equals(d)); //true
System.out.println("a".equals("b")); //false
System.out.println("a".equals("a")); //true
System.out.println("ac".compareTo("aa")); //2
//c가 a보다 뒤에있음
System.out.println("a".compareTo("b")); //-1
System.out.println("a".compareTo("a")); //0
}
}
equals메소드는 위의 코드처럼 사용하며, 문자열의 내용을 비교할 때에 사용한다.
이제 compareTo 사용 예제를 보겠다.
public class CompareToEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a= "java"; // v가 s보다 뒤에있음
String b = "jasa";
int res = a.compareTo(b); //a를 기준으로 b를 비교함
if(res == 0)
System.out.println("the same");
else if(res<0)
System.out.println(a+"<"+b);
else
System.out.println(a+">"+b);
}
}
compareTo 는 변수이름.compareTo(변수명)으로 사용할 때에 맨앞 점 앞의 변수를 기준으로 비교한다. a가 b보다 알파벳 순에서 앞이기 때문에 a를 기준으로 b를 compareTo한다면 a가 b보다 한 칸 앞에 있기 때문에 -1이 나올 것이다. 위의 코드도 출력결과가 v가 s보다 앞ㅇ ㅔ있기 때문에 java<jasa가 출력된다.
public class StringEx2 {
public static void main(String[] args) {
String a = " abcd def ";
String b = "\txty\t";
String c = a.trim(); // 앞뒤 tab, enter, space 같은 공백 제거
String d = b.trim();
System.out.println(a);
System.out.println(b);
System.out.println("trim 시작 =-===========");
System.out.println(c);
System.out.println(d);
System.out.println("Hello".charAt(0)); //H
System.out.println("Hello".charAt(4)); // o
System.out.println("Hello".indexOf('1', 3));
// 3위치부터 끝까지 '1' 탐색
// 잇으면 인덱스 리턴, 없으면 -1리턴
System.out.println("Hello".toLowerCase());
System.out.println("Hello".toUpperCase());
}
}
charAt은 변수명.charAt(인덱스번호) 로 사용하는데 변수의 인덱스 번호 번째의 문자를 출력해준다.
데이터타입[] 참조변수;
로 배열을 선언해줌
int[] scores; 또는 int scores[];
int[] scores = { 11,22,33,44,55 };
new 연산자로 배열을 생성한다
데이터타입[] 참조변수 = new 타입 [크기];
scores = new int[5];
배열의 크기는 scores.length로 나타낼 수 있음!
import java.util.Scanner;
public class AvgEx {
public static void main(String[] args) {
// 키보드에서 정수를 입력받고 평균을 구하는 프로그램 작성하기
Scanner scan = new Scanner(System.in);
int[] numbers= new int [5];
int sum=0;
for(int i =0; i<numbers.length; i++) {
int num = scan.nextInt();
numbers[i]=num;
sum+=numbers[i];
}
double avg=sum/5;
System.out.println("배열 원소의 평균은 "+avg);
}
}
-배열은 한번 생성되면 크기를 변경할 수 없음
-더 많은 저장공간이 필요하다면, 새로운 배열을 생성하고 이전 배열의 원소들을 복사해야함 -> System.arraycopy() 메소드 이용
public class PersonEx3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person[] pa;
pa = new Person[5]; //배열 객체 생성
for(int i=0; i<pa.length; i++) {
pa[i]=new Person(); //Person 객체 생성
pa[i].age = 30+i;
}
for(int i=0; i<pa.length; i++) {
System.out.print(pa[i].age+" ");
}
for(Person aPerson : pa) {
//데이터타입 변수 aPerson에 pa가 처음부터 끝까지 대입됨
System.out.println(aPerson.age);
}
}
}
for문을 개선한 방식으로 특정 원소를 나타내기 위한 인덱스를 사용하지 않음
배열이나 나열의 각 원소를 순차적으로 접근하는데 유용함
배열의 크기를 모를 때 사용하면 편리함!