참조변수에 대한 설명
변수란 값을 의미하는게 아니라, 값을 저장할 수 있는 메모리상의 공간을 의미.
ex) int A =3;
A가 변수 3은 변수값.
변수의 Type중
Primitive Type에는
boolean, char,
byte, short, int, long
float, double이 있고
Reference Type에는
8개의 기본형을 제외한 나머지타입이 속한다.
객체의 주소를 저장한다.
때문에 참조형 변수는 프로그래머가 직접 만들어 추가할 수 있으므로
그 수가 정해져 있지 않다.
ex)클래스명 변수명;
Date today;
타입이 클래스이름인 것들은 모두 참조변수이다.
참조형 변수는 null 또는 객체의 주소(4byte,0x0~0xffffffff)를 값으로 갖는다.
null은 어떤 값도 갖고 있지 않음, 즉 어떠한 객체도 참조하고 있지 않다는 것을 뜻한다.
따라서 참조변수의 초기화는 다음과 같이 한다.
Date today = null;
또는
Date today = new Date();
즉, 기본형 변수는 변수 자체가 값을 기억하고
참조형 변수는 변수 자체가 값을 기억하지 않고 값이
기억 된 위치의 주소를 기억한다.
package Java_book;public class DoWhile2 {public static void main(String[] args) {for(int i=1; i<=100; i++) {System.out.printf("%d", i);int tmp = i;do {//tmp%10이 3의 배수인지 확인(0제외)if(tmp%10%3==0 && tmp%10!=0)System.out.print("짝");} while((tmp/=10) != 0);}System.out.println();}}결과:123짝456짝789짝10111213짝141516짝171819짝20212223짝242526짝272829짝30짝31짝32짝33짝짝34짝35짝36짝짝...package Java_book;public class If {public static void main(String[] args) {//한줄로 if문 실행int score = 90;if (score > 50) System.out.println("합격입니다");//중괄호 없이 if문 실행if (score < 60)System.out.println("합격이네요.");System.out.println("이 문장은 중괄호로 묶여있지 않은 두번째 문장이라 if에 속하지 않았다.");}}결과:합격입니다이 문장은 중괄호로 묶여있지 않은 두번째 문장이라 if에 속하지 않았다.package Java_book;public class ConditionalOperator {public static void main(String[] args) {int x = 2;int y = 3;int z = 4;//조건연산자 ?: -> ? 이전게 true면 ?다음것을, false면 :다음것을 출력int result = (x > y) ? x : y;System.out.println(result);//중첩사용 가능int result2 = (x > y) ? x:(x > z) ? x : z;System.out.println(result2);//예제2int a,b,c;int absA, absB, absC;char signA, signB, signC;a = 10;b = -5;c = 0;absA = a >= 0? a : -a; //값이 음수이면 양수로 만드는 것absB = b >= 0? b : -b;absC = c >= 0? c : -c;signA = a > 0 ? '+' : ( x==0 ? ' ': '-'); //조건 연산자를 중첩signB = b > 0 ? '+' : ( y==0 ? ' ': '-');signC = c > 0 ? '+' : ( z==0 ? ' ': '-');System.out.printf("x=%c%d%n", signA, absA); //%c는 %character의 약자로, 문자라는 뜻System.out.printf("y=%c%d%n", signB, absB);System.out.printf("z=%c%d%n", signC, absC);}}결과:34x=+10y=-5z=-0package Java_book;import java.util.Arrays;public class Array1 {public static void main(String[] args) {//배열의 생성과 초기화를 동시에!//원래 array길이를 지정해야하지만, 밑에처럼 생성과 초기화를 동시에 하면//괄호안 element만큼 배열의 크기가 정해진다!int[] score = new int[] {50,60,70,80,90};//그냥 score만 출력하면 배열의 주소값만 불러온다. 왜? 참조변수니까.//참조변수에 관한 설명은 아래 사이트 참조//https://changhozz.tistory.com/entry/%EC%B0%B8%EC%A1%B0%EB%B3%80%EC%88%98%EC%9D%98-%EB%8C%80%ED%95%9C-%EC%84%A4%EB%AA%85System.out.println(score);System.out.println(score[0]);//이런식으로도 선언 가능int[] score2;score2 = new int[] {1,2,3,4,5};System.out.println(score2[0]);//이렇게 뒤에 new int[] 빼는 것도 가능int[] score3 = {6,7,8,9};System.out.println(score3[0]);//java.util.Arrays; 모듈에서 toString()사용하면 리스트 전체 출력해줌System.out.println(Arrays.toString(score3));//배열의 길이를 늘리고 싶다면? -- 배열을 복사해봐!System.out.println("배열 복사하기 첫단계");int[] arr = new int[] {1,2,3,4,5};int[] tmp = new int[arr.length*2];//기존 배열의 2배길이 선언. 값이 안들어가있는 곳은 default값이 0으로 초기화System.out.println(Arrays.toString(arr));System.out.println(Arrays.toString(tmp));for(int i = 0; i< arr.length; i++) {tmp[i] = arr[i];}//주소값 옮기기 전System.out.println("주소값 옮기기 전");System.out.println(Arrays.toString(arr));System.out.println(Arrays.toString(tmp));//주소값 옮기고 난 후System.out.println("주소값 옮기고 난 후");arr = tmp; //tmp의 주소값을 arr로 이식System.out.println(Arrays.toString(arr));System.out.println(Arrays.toString(tmp));//더 간편한 배열의 복사 -- System.arraycopy()System.out.println("더 간편한 배열의 복사");int[] arr2 = new int[] {6,7,8,9,10};int[] copiedarr2 = new int[6];//(원래 array,starting point, copied array, starting point of CA, how many element you want to copy)System.arraycopy(arr2, 0, copiedarr2, 1, arr2.length);System.out.println(Arrays.toString(arr2));System.out.println(Arrays.toString(copiedarr2));}}결과:[I@566776ad5016[6, 7, 8, 9]배열 복사하기 첫단계[1, 2, 3, 4, 5][0, 0, 0, 0, 0, 0, 0, 0, 0, 0]주소값 옮기기 전[1, 2, 3, 4, 5][1, 2, 3, 4, 5, 0, 0, 0, 0, 0]주소값 옮기고 난 후[1, 2, 3, 4, 5, 0, 0, 0, 0, 0][1, 2, 3, 4, 5, 0, 0, 0, 0, 0]더 간편한 배열의 복사[6, 7, 8, 9, 10][0, 6, 7, 8, 9, 10]package Java_book;public class Array2 {public static void main(String[] args){//1. 총합과 평균int sum = 0;float average = 0f;int[] score = {100,80,100,100,90};for(int i = 0; i<score.length;i++){sum += score[i];}average = sum / (float)score.length;System.out.println("총점: "+sum);System.out.println("평균: "+average);//2. 최대값과 최소값int[] score2 = {79,88,91,33,100,55,95};int max = score2[0];int min = score2[0];for(int i=1; i<score.length;i++){if(score[i]>max){max = score[i];}else if(score[i]<min){min = score[i];}}System.out.println("최대값 : "+ max);System.out.println("최소값: "+ min);//3. 섞기(shuffle)int[] numArr = new int[10];for(int i = 0; i < numArr.length ; i++){numArr[i] = i;}for(int i = 0; i < 10; i++){int n = (int)(Math.random() * 10);int tmp = numArr[0];numArr[0] = numArr[n];numArr[n] = tmp;}for(int i = 0; i < numArr.length; i++){System.out.print(numArr[i]);}}}총점: 470평균: 94.0최대값 : 100최소값: 797963025481package Java_book;import java.util.Arrays;public class Array3 {public static void main(String[] args) {//String 배열 선언 방법1String[] name = new String[3];name[0] = "Kim";name[1] = "Park";name[2] = "Yi";System.out.println(Arrays.toString(name));//String 배열 선언 방법2String[] name2 = new String[] {"Cho","Doo","Hwan"};System.out.println(Arrays.toString(name2));//String 배열 선언 방법3String[] name3 = {"Li","Yang","Yang"};System.out.println(Arrays.toString(name3));//char 배열 -> Stringchar[] chArr = {'A','B','C'};String str = new String(chArr); //char[] to StringSystem.out.println(str);char[] tmp = str.toCharArray(); //.tocharArray()는 String to char[]System.out.println(tmp[0]);}}[Kim, Park, Yi][Cho, Doo, Hwan][Li, Yang, Yang]ABCApackage Java_book;public class Morse {public static void main(String[] args) {String source = "HELPME";String[] morse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};String result = "";for(int i = 0; i < source.length(); i++){result += morse[source.charAt(i)-'A'];}System.out.println("source:"+source);System.out.println("morse:"+result);}}source:HELPMEmorse:......-...--.--.