주소값
을 저장하고 있음, 객체가 생성된 메모리 번지 저장값
자체 저장객체(object)
= 데이터(필드) + 메소드읽은 내용이 저장
되는 영역객체가 생성
되는 영역프레임 저장
되는 영역주소 값이 다름
다른 객체를 가르침
import java.util.Scanner;
public class Ex01
{
public static void main(String[] args)
{
Scanner in1 = new Scanner(System.in); // in 변수
Scanner in2 = new Scanner(System.in); // in 변수
Scanner in3 = new Scanner(System.in); // in 변수
System.out.println(in1.hashCode()); // 2137211482
System.out.println(in2.hashCode()); // 920011586
System.out.println(in3.hashCode()); // 920011586
}
}
import java.util.Scanner;
public class Ex1
{
public static void main(String[] args)
{
int[] arr1;
int[] arr2;
int[] arr3;
arr1 = new int[] {1,2,3}; //배열 {1, 2, 3}을 생성하고 arr1 변수에 대입
// 배열 {1, 2, 3} 생성하고 arr2 변수에 대입
arr2 = new int[] {1, 2, 3};
// 배열 변수 arr2의 값을 배열 변수 arr3에 대입 코드
arr3 = arr2;
System.out.println(arr1==arr2); // 주소값이 같은지를 비교 false
System.out.println(arr2==arr3); //true 주소값이 같음
}
}
아직 번지를 저장하고 있지 않다
는 뜻초기값
으로 사용 가능하기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성// 기본 타입 변수
String refVar2 = null;
System.out.println("refVar2 : "+refVar2.hashCode()); //NullPointerExpection
// 참조 타입 변수
int[] arr1 = null; //초기화로 사용 가능
Scanner in = new Scanner(System.in);
String name=in.next(); // 계속 재사용 가능
String hobby = in.next();
System.out.println(name+"의 취미는 "+hobby);
==
은 String의 주소값을 비교하는 느낌// 자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계 (리터럴 풀)
String str1 = "자바";
String str2 = "자바";
// 등록된 값이 같다면... 새로운 공간을 만들지 않기에
System.out.println(str1 == str2); // true가 나옴
System.out.println(str1.hashCode()+" "+str2.hashCode()); //1631876 1631876
new
로 연산자(객체 생성 연산자)로 직접 String 객체를 생성/대입 가능// 따로 운영을 하고 싶다면
String str3 = new String("자바");
String str4 = new String("자바");
System.out.println(str3 == str4); //false
// 주소값 비교시 똑같지만 위가 false new로 인해 따로 운영가능
System.out.println(str1.hashCode()+" "+str2.hashCode() );
// 내부 안에 문자열이 같은지 확인하는 법 equals
boolean result = str1.equals(str4);
boolean result2 = !str1.equals(str3);
System.out.println("result : "+result); //문자열이 같은지 검사(대소문자 검사)
charAt()
메소드특정 위치의 문자
를 얻을 수 있음// 주민등록번호에서 성별에 해당하는 7번째 문자를 읽어서 남자 또는 여자인지 판단하여 출력
String ssn = "950624123012";
char gender = ssn.charAt(6); // index는 항상 0부터 시작하므로 6번째 문자 지정
int len = ssn.length(); //공백을 포함하여 세는 전체 길이 문자열 길이
System.out.println("ssn 문자열의 길이 :"+len);
switch(gender) {
case '1' :
case '3':
System.out.println("남자");
break;
case '2':
case '4':
System.out.println("여자");
break;
default:
break;
}
replace()
메소드// 문자열 대체 : replace() 기존 문자열은 그대로 두고 새로운 문자열을 리턴한다.
String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("자바", "Java");
System.out.println(newStr);
System.out.println(oldStr == newStr); //false
subString()
메소드public class String03
{
public static void main(String[] args)
{
// 문자열 잘라내기 subString() : 특정 위치의 문자열을 잘라내어 가져온다.
//subString(int beginindex)
//subString(int beginindex, int endindex)
String ssn ="960123-1057819";
int len = ssn.length();
System.out.println(len);
// 나눌 공간 필요
String firstNum = null;
String secondNum = null;
firstNum = ssn.substring(0, 6); //0부터 6까지를 잘라서 넣겠다
secondNum = ssn.substring(7, len); //시작값만 주기
System.out.println(firstNum);
System.out.println(secondNum);
}
}
indexOf()
**public class String04
{
public static void main(String[] args)
{
// 문자열 찾기 기능 : 문자열에서 특정 문자열의 위치를 찾고자 할 때 indexOf() 사용
// indexOf()는 주어진 문자열이 시작되는 인덱스 리턴
String subject = "자바 프로그래밍은 재미있습니다. 유용하며 활용도가 높습니다. ";
int index = subject.indexOf("유용");
if(index == -1) { //index는 0부터 시작이니까
System.out.println("해당 문자열이 존재하지 않습니다.");
}
else {
// 원하는 문자열부터 끝까지 추출, substring(begining값) 검색어 추출
String result = subject.substring(index);
System.out.println(result); // 유용하며 활용도가 높습니다.
}
}
}**
contains()
// 주어진 문자열이 단순히 포함되어 있는지 없는지 여부 조사 : contains()
boolean result2 = subject.contains("프로그래밍");
System.out.println(result2); //true
split()
구분자가 있는 여러 개의 문자열을 분리할 때
public class String05_split
{
public static void main(String[] args)
{
String board ="1, 자바 학습,,참조타입, String을 학습중입니다., 홍길동";
// 문자열 분리 ,를 기준으로 분리
String[] tokens = board.split(",");
//인덱스별로 읽기
System.out.println("번호 :"+tokens[0]);
System.out.println("제목 :"+tokens[1]);
System.out.println("내용1 :"+tokens[2]);
System.out.println("내용2 :"+tokens[3]);
System.out.println("성명 :"+tokens[4]);
for(int i=0; i<tokens.length; i++) { // 일반 for문
System.out.println(tokens[i]);
}
for(String string : tokens) { //foreach문
System.out.println(string);
}
}
}
대괄호 [ ]
와 함께 사용하여 각 항목의 값을 읽거나 저장하는데 사용타입[] 변수;
타입 변수[];
힙 영역
에 배열 주소 저장저장될 값의 목록
이 있다면, 다음과 같이 간단하게 배열을 생성할 수 있음타입[] 변수 = {값 0, 값1, 값2, 값3...};
new 타입[]
을 중괄호 앞에 붙여줌타입은 배열 변수 선언 시 사용하는 타입과 동일하게 지정
변수 = new 타입[]{값1, 값2, 값3, 값4...};
타입[] 변수 = new 타입[길이];
length
배열이름.length;
for(String str:season) {
System.out.println(str);
}
public class StringArrayTest
{
public static void main(String[] args)
{
// 문자열 배열 season 변수 선언과 배열 생성 초기값
// String[] season = new String[4];
String[] season = {"Spring", "Summer", "Fail", "Winter"}; //메모리 생성 + 초기화
// 인덱스 1번 항목의 값을 "여름"으로 변경하고 변경된 내용 출력
season[1] ="여름";
System.out.println(season[1]);
printSeason(season);
}
public static void printSeason(String[] s) {
// 배열의 항목값 읽기
for(String str:s) {
System.out.println(str);
}
}
}
public class MultiArray01
{
public static void main(String[] args)
{
// 예시 : 두 반의 학생의 점수를 저장하는 배열 선언
//반 : 1차원배열, 해당 반의 학생점수
int [][] scores = {{80,90,96}, {76,88}};
// 1반의 1번 학생의 점수
System.out.println(scores[0][0]);
// 1반의 2번 학생의 점수
System.out.println(scores[0][1]);
// 1반의 3번 학생의 점수
System.out.println(scores[0][2]);
//2반의 1번 학생의 점수부터 차례로 출력
System.out.println(scores[1][0]);
System.out.println(scores[1][1]);
// 반의 수 :
System.out.println(scores.length);
//1반의 학생의 수
System.out.println(scores[0].length);
//2반의 학생의 수
System.out.println(scores[1].length);
}
}
다차원 배열을 생성
하려면타입[][] 변수 = new 타입[1차원수][2차원수];
이전 배열로부터 항목들을 복사
해야 함public class ArrayCopy01
{
public static void main(String[] args)
{
// 길이가 3인 정수형 배열
int[] oldIntArray = {1, 2, 3};
// 길이가 5인 정수형 배열
int[] newIntArray = new int[5];
// 배열 항목 복사
for(int i =0; i<oldIntArray.length; i++) {
newIntArray[i] = oldIntArray[i];
}
for(int num : newIntArray) {
System.out.print(num + " ");
}
}
}
> ```
- 예시 2
```java
// 배열 항목 복사
System.arraycopy(oldIntArray, 0, newIntArray, 0, oldIntArray.length);
배열은 반복문과도 관련이 있는데 이 둘을 정확히 이해 하지 못하면 연관짓기는 힘들 것 같다. 멀티캠퍼스는 처음 배우시는 분들도 부트캠프에 꽤 많은데 나는 학교에서 배워서 알고 있는데 처음 배우면 여기서 부터 막힐 것 같다는 생각을 했다. 그래도 나는 학교에서 배울 때 C보다는 자바가 더 재미있고 좋더라.
자바 하나 떼고 나면 디자인 패턴이랑 알고리즘을 연관시켜서 공부하고 싶다. 나는 욕심이 많아서 이것저것 해보고 싶은게 많다. 어느정도 백엔드에 익숙해지면 백엔드랑 게임서버도 완전 다르지는 않다는데 꼭... 게임업계도 도전해보고 싶다. 어쩌다가 일본 8년차 게임 개발자를 알게 됐는데 너무 멋있더라. 나도 능력 있는 사람이 되도록 하루 하루 노력하자!!