기본자료형(stack영역) : byte, short, int(4 : 32bit), long(8 : 64bit)
long num1 = 32;
long num1= 32L;
==> 두 개가 저장되는 것이 다르다.
float num2 = 3.15; (X)
float num2 = (float)3.15; (O)
float num2 = 3.15F; (O)
==> 캐스팅을 해주거나 float을 나타내는 F를 적어줘야 오류가 나지 않는다.
참조자료형(heap영역)
Scanner sc;
% 연산자 순위가 높음 !
<지역변수>
지역변수 local variable : 특정 블럭 { } 안에서 선언된 변수, 그 지역 내에서만 사용 가능 ex) 온통대전
지역변수를 바깥에서 사용하고 싶으면 바깥에 따로 선언해서 사용해야하며 for문 안 변수와 이름이 같더라도 전혀 다른 존재이다. 그 지역이 끝나면 메모리에서 사라짐.
<-->
전역변수 global variable: 자바에는 존재하지 않음.
public class Variables {
public static void main(String[] args) {
//지역변수 local variable 특정 블럭 { } 안에서 선언된 변수
int a = 10;
for(int i =0; i < 10; i++ ) {
}
int i = 70;
System.out.println(i);
}
}
자기가 속해있는 블록에 영향력을 미친다.
<final 변수>
final double PI = 3.14;
자바에서는 멤버변수, 클래스변수, 지역변수 세가지의 변수가 있다.
이중 for문
복습하기!
for(int j = 5; j > 0; --j ) {
for(int i = 0; i < j-1; ++i)
System.out.print("."); // .은 공백을 의미
for(int i = 0; i < 6-j; ++i) {
System.out.print("#");
}
System.out.println();
}
<배열>
: 동일한 타입의 변수가 여러개 필요한 경우
: int[] ary = new int[10]; 배열의 선언
: 선언한 배열의 크기는 고정되어 변경 불가능하다. 삭제해 다시 만들어야 한다. ==> 단점
: 개선하기 위해 ArrayList를 사용한다.(가변)
: 파이썬은 무조건 가변, 자바와 C만 고정적인 자료구조가 있다.
변수명은 stack에 저장, 즉 배열의 변수는 stack 영역
new라는 단어는 heap영역에 생김!
heap영역의 데이터에 초기화가 되어있지 않으면 0이 들어있다.
stack영역의 경우에는 초기화시키지 않으면 오류 발생!
stack 영역에 저장된 변수의 값은 암호화된 주소! (hash주소, 찐주소가 아님)
ex) System.out.println(ary);
배열을 출력할 경우
for(int i =0; i < 10; i++){
sysout(ary[i] + " " );
}
<배열의 선언방법>
int[] ary = new int[10];//배열 변수의 선언
int[] ary2;
ary2 = new int[10];
int[] ary3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //선언과 동시에 초기화
System.out.println(ary3[2]);
int[] ary4 = new int[] {1,2,3};
length : 배열의 방의 개수 !
배열의 코드는 초기화하는 코드와 출력하는 코드를 따로 작성하는 것이 더 좋다!
for(int i = 0; i < ary.length; ++i) {
ary[i] = i*5+10;
}
for(int i =0; i < ary.length; ++i){
sysout(ary[i] + " ")
}
Example_02 복습하기
배열 양끝 값을 서로 바꾸기 문제
int[] ary = new int[] {5, 10, 15, 20, 25, 30};
int temp;
for(int i = 0; i < ary.length/2; ++i) {
temp = ary[i];
ary[i] = ary[ary.length-1-i];
ary[ary.length-1-i] = temp;
}
for(int i = 0; i < ary.length; ++i){
sysout(ary[i] + " ");
}
<유니코드>
유니코드 2byte == ASCII
char ch1 = 'A'; 65 ((int)ch1);
char ch2 = 'a'; 97 ((int)ch2);
대문자, 소문자 간의 차이 32이다.
문자를 대문자 <-> 소문자 서로 바꿔주기!
char[] ch = {'Z', 'b', '@', 'T', 'e'};
//배열 ch의 대문자, 소문자 서로 바꿔주기!
//대문자65를 소문자97 차이 32
for(int i = 0; i < ch.length; ++i ) {
if(ch[i] >= 'A' && ch[i] <= 'Z')
System.out.println((char)(ch[i]+32));
else if(ch[i] >= 'a' && ch[i] <= 'z')
System.out.println((char)(ch[i]-32));
else System.out.println("알파벳이 아님.");
}
main (String[] args)
args 객체가 생성되었지만 크기가 없는 독특한 친구
길이 length는 없으면서 주소값은 가지고 있음! command를 사용하던 잔재
public static void main(String[] args) {
System.out.println(args);
System.out.println(args.length);
}
===========<console 출력값>===============
[Ljava.lang.String;@515f550a
0
<1차원배열>
int[] ary = { 1,2,3,4,5};
<다차원 배열>
: 배열의 배열
: int[][] ary2 = new int[5][3];
==> 15개가 만들어짐.
2차원 배열은 참조의 참조 형태!
행 low 가로
열 column 세로(속성)
int[][] ary3 = {{1,2},{3,4},{5,6}};
System.out.println(ary3.length);
System.out.println(ary3);
System.out.println(ary3[0]);
System.out.println(ary3[0][0]);
===========<console 출력값>===============
3
[[I@515f550a
[I@626b2d4a
1