카테고리 없음

19-03-20_TIL

Doohwancho 2019. 3. 20. 14:56

참조변수에 대한 설명

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%85

변수란 값을 의미하는게 아니라, 값을 저장할 수 있는 메모리상의 공간을 의미.
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);
//예제2
int 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);
}
}
결과:
3
4
x=+10
y=-5
z=-0
package 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%85
System.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@566776ad
50
1
6
[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
최소값: 79
7963025481
package Java_book;
import java.util.Arrays;
public class Array3 {
public static void main(String[] args) {
//String 배열 선언 방법1
String[] name = new String[3];
name[0] = "Kim";
name[1] = "Park";
name[2] = "Yi";
System.out.println(Arrays.toString(name));
//String 배열 선언 방법2
String[] name2 = new String[] {"Cho","Doo","Hwan"};
System.out.println(Arrays.toString(name2));
//String 배열 선언 방법3
String[] name3 = {"Li","Yang","Yang"};
System.out.println(Arrays.toString(name3));
//char 배열 -> String
char[] chArr = {'A','B','C'};
String str = new String(chArr); //char[] to String
System.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]
ABC
A
package 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:HELPME
morse:......-...--.--.