320x100
public class Main {
public static void main(String[] args) {
// 1. 자료형 - 문자열
System.out.println("== 문자열 ==");
String s1 = "Hello world";
System.out.println("s1 = " + s1);
System.out.println("");
String s2 = "01234";
System.out.println("s2 = " + s2);
// 1-1 equals
String s3 = "Hi";
String s4 = "Hi";
System.out.println(s3.equals(s4));
System.out.println(s3 == s4);
String s5 = new String("Hi");
System.out.println(s3.equals(s5));
System.out.println(s3 == s5);
// 1-1에서의 s3과 s4의 메모리 값은 같기 때문에 equals를 돌렸을 때, true가 나오는데,
// s5에서 new String으로 새롭게 정의를 해주니, 메모리 값이 다르게 나온다고한다.
// 파이썬과 개념이 여기서는 달라서 메모리 값 참조는 헷갈리긴 하다.
// 1-2. indexOf
// 이거는 지정한 값에 대해서 가장 먼저 조건이 충족되는 인덱스 값을 리턴해주는 것 같다.
String s6 = "Hello world";
System.out.println(s6.indexOf("d"));
// 1-3replace
// a를 b로 바꿔준다
String s7 = s6.replace("Hello", "Bye");
System.out.println("s7 = " + s7);
// 1-4 substring
// a에서 시작해서 b부터 출력 배제한다.
System.out.println(s7.substring(0, 3));
System.out.println(s7.substring(0, s7.indexOf("d")));
// 1-5 toUpperCase
// 대문자 출력
System.out.println(s7.toUpperCase());
// 2. 자료형 - StringBuffer
System.out.println("== StringBuffer == ");
StringBuffer sb1 = new StringBuffer();
System.out.println("sb1 = " + sb1);
sb1.append("01234");
System.out.println("sb1" + sb1);
sb1.append("67890");
System.out.println("sb1" + sb1);
String a = "01234";
String b = "56789";
System.out.println(a + b);
a += b;
System.out.println(a);
// 3. 자료형 - 배열
// 지정된 인덱스 값에 있는 값을 리턴해주는 것 같다.
System.out.println("== 배열 == ");
int[] myArray1 = {1,2,3,4,5};
System.out.println(myArray1[0]);
System.out.println(myArray1[1]);
System.out.println(myArray1[2]);
System.out.println(myArray1[3]);
System.out.println(myArray1[4]);
// 새로 부여
char[] myArray2 = {'a', 'b', 'c', 'd', 'e'};
System.out.println(myArray2[3]);
String[] myArray3 = new String[3];
myArray3[0] = "Hello";
myArray3[1] = "Moto";
myArray3[2] = "world!";
System.out.println(myArray3);
// [Ljava.lang.String;@1b6d3586
// 이렇게 값으로 나온다. 일종의 메모리 값처럼
System.out.println(myArray3[0] + myArray3[1] + myArray3[2]);
// HelloMotoworld! 이렇게 나온다. 의도했던대로
// 추후에 확인해보도록 하자.
}
}
의문점1
왜 String s3 = "Hi";
String s4 = "Hi";
가 메모리 값이 같아서 equals를 돌리면 true가 나오는지도 잘 모르겠다.
이후에 String s5 = new String("Hi");
는 s3,s4와 다른 값이 된다.
new를 거치지 않고 정의가 된 값은 s3,s4같은 변수마다 메모리가 부여되는 구조가 아니라
내부 값에 따라서 메모리 값이 정의되는 것인가?
예외적으로 new로 재정의 된 것만 다른가? 하는 생각이 든다.
의문점2
new로 재정의 되는 String에 대한 이해도가 떨어져서,
어떻게 중간에 인덱스 0,1,2 값에 각각의 값을 담아주고 나올 수 있는거지? 싶어서 테스트를 좀 해봤다.
String[] myArray4 = new String[3];
System.out.println(myArray4);
//[Ljava.lang.String;@4554617c
저 String[3]의 의미가 "3개의 인덱스를 부여해주는 것이고,
출력값으로 나온
Ljava가 인덱스 0, lang이 인덱스 1, String이 인덱스 2를 담당하고, 그 뒤의 값은 메모리 참조 값인가?
라고 생각했다.
String[] myArray5 = new String[5];
System.out.println(myArray5);
// [Ljava.lang.String;@74a14482
그래서 이렇게 시도를 해봤는데, 내용값은 메모리 참조 값으로 추정되는 것을 제외하곤 변한게 없다.
더 알아가도록 하자
300x250
'개발일지 > 임시카테고리' 카테고리의 다른 글
Java - java: variable scores is already defined in method main(java.lang.String[]) (0) | 2024.08.06 |
---|---|
Java - maps, HashMap 등 key, value값 관련 기초 (0) | 2024.08.05 |
java: unclosed character literal (0) | 2024.08.01 |
새 시작 (0) | 2024.08.01 |
패스트캠퍼스 강의 9개정도 들은 후기 - 빅데이터처리 with Spark&Hadoop 초격차 패키지 Online. 등 (1) | 2023.12.04 |