1. String 에서 concat 메소드에 대해서 설명하시오.
public String concat(String str) {
if (str.isEmpty()) {
return this;
}
if (coder() == str.coder()) {
byte[] val = this.value;
byte[] oval = str.value;
int len = val.length + oval.length;
byte[] buf = Arrays.copyOf(val, len);
System.arraycopy(oval, 0, buf, val.length, oval.length);
return new String(buf, coder);
}
int len = length();
int olen = str.length();
byte[] buf = StringUTF16.newBytesFor(len + olen);
getBytes(buf, 0, UTF16);
str.getBytes(buf, len, UTF16);
return new String(buf, UTF16);
}
- parameter 가 비었으면 값이 변하지 않는다.
- parameter 에 String 이 들어있으면 그 String 을 기존 String 에 더해준다.
2. String 에서 substring 메서드 사용법은
public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = length() - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
if (beginIndex == 0) {
return this;
}
return isLatin1() ? StringLatin1.newString(value, beginIndex, subLen)
: StringUTF16.newString(value, beginIndex, subLen);
}
public String substring(int beginIndex, int endIndex) {
int length = length();
checkBoundsBeginEnd(beginIndex, endIndex, length);
int subLen = endIndex - beginIndex;
if (beginIndex == 0 && endIndex == length) {
return this;
}
return isLatin1() ? StringLatin1.newString(value, beginIndex, subLen)
: StringUTF16.newString(value, beginIndex, subLen);
}
- oneString.substring(int beginIndex): parameter 를 int 로 하나 넣었을 때 oneString 을 byte[] 로 받아내고 그 byte[] 의 index 로 beginIndex 부터의 마지막 값까지를 받아내서 String 으로 변환하고 return 한다.
- oneString.substring(int beginIndex, int endIndex): parameter 를 int 로 2개 넣었을 때 oneString 을 byte[] 로 받아내고 그 byte[] 의 index 로 beginIndex 부터 (endIndex - 1) 값까지를 받아내서 String 으로 변환하고 return 한다.
3. String compareTo 사용법은?
public int compareTo(String anotherString) {
byte v1[] = value;
byte v2[] = anotherString.value;
if (coder() == anotherString.coder()) {
return isLatin1() ? StringLatin1.compareTo(v1, v2)
: StringUTF16.compareTo(v1, v2);
}
return isLatin1() ? StringLatin1.compareToUTF16(v1, v2)
: StringUTF16.compareToLatin1(v1, v2);
}
- oneString.compareTo(String anotherString): parameter 를 anotherString 으로 하나 넣었을 때 oneString 과 anotherString 을 각각 byte[] 로 받아내고 첫번째 자리부터 비교해서 다르면 값을 반환하고 같으면 다른 자리 문자가 나올 때까지 비교해서 다르거나 한쪽만 문자가 있는 경우에 값을 반환한다.
- (oneString.substring(0, n)).equals((anotherString.substring(0, n))) 가 true 지만 (oneString.substring(0, n + 1)).equals((anotherString.substring(0, n + 1))) 이 false 인 경우에서 oneString 을 byte[] 로 v1[], anotherString 을 byte[] 로 v2[] 로 받았다고 할때, (v1[n] - v2[n]) < 0 이면 (-1 + (v1[n] - v2[n])) 이 return 값으로 나오고, (v1[n] - v2[n]) > 0 이면 (1 + (v1[n] - v2[n])) 이 return 값으로 나온다.
- (oneString.substring(0, n)).equals((anotherString.substring(0, n))) 가 true 지만 ((oneString.length() == n) && (anotherString.length() > n)) 도 true 인 경우에는 (-1) 이 return 된다.
- 마찬가지로 (oneString.substring(0, n)).equals((anotherString.substring(0, n))) 가 true 지만 ((anotherString.length() == n) && (oneString.length() > n)) 도 true 인 경우에는 1 이 return 된다.
- 아예 oneString.equals(anotherString) 이 true 인 경우에는 0 이 return 된다.
4. String.valueOf 에 대하여 설명하시오.
- String 으로 명시적 형변환을 시켜준다.
- static method 이기 때문에 선언 없이 사용할 수 있다.
- method overloading 이 적용돼서 다양한 data types 를 String 으로 casting 시킬 수 있다.
5. 아래가 실행되는 원리(함수)를 표현해 보세요.
String str = "age" + 17;
String str = "age".concat(String.valueOf(17));