2013년 8월 27일 화요일

자바 문자열(String)에 관하여... [오라클교육오라클자바교육강의강좌,자바교육,ORACLEJAVA교육강의강좌]

이번 강좌에서는 자바에서의 문자열(java.lang.String)에 대하여 알아 보겠습니다. 

오라클자바커뮤니티에서 설립한  개발자실무교육6년차 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링, Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#, ASP.Net)   www.onjprogramming.co.kr 
 

자바에서는 문자열을 객체로서 다룹니다.String클래스는 자바와 함께 제공되는 표준 클래스 이며 유니코드(UniCode)를 사용하므로 각각의 문자는 2Byte를 차지합니다. 문자열을 만드는 방법의 아래 처럼 2가지 방법이 있습니다.

String s = new String(“jclee”);
String s = “jclee”;


‘+’연산시 한쪽의 타입이 String 이라면 나머지쪽도 자동으로 String으로 변환되어 문자열이 더해지게 되는 것입니다.

String a = “abc”; int i=5;
System.out.println(a + i);

문자열의 길이를 알기 위해서는 String.length()를 사용 합니다.

[예제1]

public class StringTest {
public static void main(String[] args) throws java.io.IOException {
String a;
String b=null;
String c="";
if (b == null) {
System.out.println("b는 아무것도 참조하지 않습니다...");
}
//아래의 경우 Compile시 NullPointEXception이 발생한다.
//System.out.println("b=null일때 b의 길이 -->"+b.length());

//아래의 두경우 모두 a가 초기화 되지 않았다는 오류발생
//if (a == "1234"){
// System.out.println("a는 '1234'와 같습니다...");
//}
//if (a == null) {
// System.out.println("a는 아무것도 참조하지 않습니다...");
//}

/////////////////////////////////////////////////////////
System.out.println(c.hashCode());
if (c == null) {
System.out.println("c는 아무것도 참조하지 않습니다...");
}

if (c == "") {
System.out.println("c는 "" 입니다...");
}
if (c == " ") {
System.out.println("c는 " " 입니다...");
}
if (c.equals(null)){
System.out.println("c는 아무것도 참조하지 않습니다...");
}
if (c.equals("")){
System.out.println("c는 "" 입니다...");
}
if (c.equals(" ")) {
System.out.println("c는 " " 입니다...");
}
//아래의 경우 c가 ""이므로 NullPointException이 발생한다.
//if (c.compareTo("")==0){
// System.out.println("c는 "" 입니다...");
//}
System.out.println("""의 길이 -->"+c.length());

/////////////////////////////////////////////////////////
String d=" ";
System.out.println(d.hashCode());
if (d == null) {
System.out.println("d는 아무것도 참조하지 않습니다...");
}
if (d == "") {
System.out.println("d는 "" 입니다...");
}
if (d == " ") {
System.out.println("d는 " " 입니다...");
}
if (d.equals(null)){
System.out.println("d는 아무것도 참조하지 않습니다...");
}
if (d.equals("")){
System.out.println("d는 "" 입니다...");
}
if (d.equals(" ")) {
System.out.println("d는 " " 입니다...");
}
// 이 경우에도 NullPointException이 발생한다.(주의)
//if (d.compareTo(" ")==0){
// System.out.println("d는 " " 입니다...");
//}
System.out.println("" "의 길이 -->"+d.length());
d = d.trim();
System.out.println("trim후 " "의 길이 -->"+d.length());
}
}

[결과]
b는 아무것도 참조하지 않습니다...
0
c는 "" 입니다...
c는 "" 입니다...
""의 길이 -->0
32
d는 " " 입니다...
d는 " " 입니다...
" "의 길이 -->1
trim후 " "의 길이 -->0




[예제2]

//== 연산자인 경우 양쪽에 객체가 오는 경우 값이 같더라도 참조하고 있는 곳(주소)이 틀리면 다르다고 합니다.

class StringTest2 {
public static void main(String[] args) {
String a="1234";
String b="12";
String c="34";
b += c;

// ==인 경우 실제 값이 같아도 참조하고 있는것이 틀리면 false
System.out.println("a : " +a+" b : "+b);
if (a == b) {
System.out.println("a와b 두문자열 동일한 문자열을 참조한다.");
}
else {
System.out.println("a와b 두문자열 동일한 문자열을 참조하지 않는다.");
}

//c="1234";
c = new String("1234");
System.out.println("b : " +b+" c : "+c);
if (b == c) {
System.out.println("b와c 두문자열 동일한 문자열을 참조한다.");
}
else {
System.out.println("b와c 두문자열 동일한 문자열을 참조하지 않는다.");
}

System.out.println("a : " +a+" c : "+c);
if (a == c) {
System.out.println("a와c 두문자열 동일한 문자열을 참조한다.");
}
else {
System.out.println("a와c 두문자열 동일한 문자열을 참조하지 않는다.");
}
}
}

[결과]
a : 1234 b : 1234
a와b 두문자열 동일한 문자열을 참조하지 않는다.
b : 1234 c : 1234
b와c 두문자열 동일한 문자열을 참조하지 않는다.
a : 1234 c : 1234
a와c 두문자열 동일한 문자열을 참조하지 않는다.

댓글 없음:

댓글 쓰기