자료형

jinkyung·2021년 1월 6일
0

JAVA

목록 보기
1/29

cmd


D:\java>notepad Ex02.java
D:\java>set path=C:\Program Files\Java\jdk1.8.0_271\bin;%PATH%
D:\java>javac Ex02.java
( = javac.exe Ex02.java와 같다)


D:\java>java Ex02
Hello World!

D:\java>java.exe Ex02
Hello World!

D:\java>javac -d target Ex05.java

소스파일과 클래스파일 분리하기 위해 target이란 폴더 만들었음. target 폴더에 컴파일하라는 뜻이다.

EX01.txt


class Ex01{

public static void main(String[] args){

    // 한글 안될때는 컴파일시 옵션추가

    //ex) javac -encoding utf-8 Ex03.java

    System.out.println("Hello World!");

    System.out.println("한글깨짐");

    System.out.println(1234); // 100을 콘솔에 출력해달라

    System.out.println(1+2+3+4+5);

    System.out.print("출력만해라");

	}

}

환경변수 설정

배치파일 : 경로를 맨날 입력하기 귀찮으니까 경로설정이 된 배치파일을 하나 만들었음.

path.bat의 내용

@echo off

set path=C:\Program Files\Java\jdk1.8.0_271\bin;%PATH%

echo "set path...ok"

-->cmd 실행 후 path.bat 입력하면 파일 안에 써둔 경로로 설정이 된다.

javac -version 명령어로 경로가 제대로 세팅 되었는지 확인한다.

자료형

: 메모리를 얼만큼 자를 것이냐, 원하는 형태로 잘라서 읽을 수 있는 범위

실수형 float, double

실수는 모두(정수, 소수점아래 모두) 근사값, 정확한 값은 아니다. 그러나 일반적인 상황에선 문제가 없다.

근사값을 사용하기때문에 표현범위가 넓다.

문자 정수형 char : 2byte (= 16bit)

자바는 유니코드를 사용. 컴퓨터에서는 문자도 숫자이다. 이 데이터를 어떻게 화면에 띄워줄 것이냐 = 폰트.

문자열 = 문자의 집합. 안에 elements가 하나도 없어도 집합인 것.

but 문자는 그렇지 않다. 반드시 하나의 문자가 들어와야 한다. (없으면 출력할때 오류)

2^16만큼 표현가능. (음수 양수없으니까 빼고 뭐하는거 없음)

정수의 표현체계(문자를 숫자로 표현한다는 말)를 그대로 쓰기 때문에 char는 정수형에 포함이된다.

'역슬래쉬\u AC00'= 유니코드에 해당하는 AC00 (개행, 엔터, tab도 하나의 문자이다.)

class Ex05 {

public static void main(String[] args){

​

System.out.println("문자열");

System.out.println('각');

System.out.println('\uac01');                   //문자 '각' 출력

System.out.println('\uac01'-'\uac00');        // 1이 출력됨

System.out.println('각'-'가');  
// 마찬가지로 1이 나온다.

​

System.out.println('1'+'0');        
//97이 출력 : 0 문자에 해당하는 숫자 + 1 문자에 해당하는 숫자.

System.out.println(1+0);                  // 1이 출력됨

System.out.println("1"+"0");            //10이 출력됨.

​

 }

}

boolean

자바에서 boolean은 0,1값을 줄 수없고 무조건 true, false로 값을 줘야한다.

자바의 숫자 default형 = int형

-Long 타입으로 상수를 쓸 때 - 숫자 + L

(기본(int)보다 클 경우에만 쓴다.)

      System.out.println(214748368L);

byte & short

byte와 short는 잘 쓰지 않는다. 그렇기 때문에 변수에 대입 시 s나 b를 붙이지 않아도 byte, short로 인식한다.(편의를 위한 예외) + byte 변수가 있고 거기에 128을 대입한다면, 128은 byte의 범위를 벗어났으므로 자동으로 int로 인식하여 오류가 발생한다.

byte su3;
	su3 = 127;
	System.out.println(su3+1);      //int형이 되어 128이 출력된다.
// su3=(byte)(su3+1);로 바꿔 출력하면 byte로 나온다. 
// 하지만 범위를 넘어섰기에 값은 -128이 된다.
// su3++; 로 바꿔 출력해도 마찬가지로 -128.


byte su3, su4;
	su3 = 127;
    su4 = 1;
	System.out.println(su3+su4);
// 128이 출력된다. int로 바꿔 출력하기 때문에.
// why? byte를 모르는 자바는 int로 바꿔서 연산을 해버림.


byte su3;
	su3 = 127;
    su3 = su3+1;             
	System.out.println(su3);
// int를 바이트로 바꿀 수 없다는 오류가 뜬다.
// su3+1에서 이미 int가 되었는데, byte 변수에 대입하라고 하니까 오류.


byte su5 = su3 + su4;
System.out.println(su5);

// 연산된 int를 byte에 대입하는 것 - > 오류

자바의 실수 default형 = double형

메모리 사이즈를 줄이고 싶다면 자료형을 float으로 쓴다. 더블형에 float 실수를 대입할 시 f를 붙이지 않으면 값을 기본 double형으로 인식하기때문에 오류가 발생.

// 컴파일 에러 - double을 float으로 바꿀 수 없다는 에러가 뜬다.
float var2 = 3.14;     

float var3 = 3.14f;    //그러므로 f를 붙여줌 

//혹은 f로 처리하지 않고 값 앞에 (float)를 붙여서 형 변환을 할 수도 있다.

float su6 =(float) 3.14;

float aFloat = (float)12.123456789234567890;

*수행하는 방법이 완전히 다른 것을 보여주는 예시

public static void main(String[] args){

 	int su;

// 1,2,3을 복사해서 쓰는 셈이다. 이미 1,2,3이 메모리에 이미 있었다는 뜻.
	su=1;
	System.out.println(su);
	su=2;
	System.out.println(su);
	su=3;
	System.out.println(su);
	
// 이 경우는 상수가 1 하나만 존재하여 갖다 쓰는 것이다.
	su=su+1;
	System.out.println(su);

	su=su+1;
	System.out.println(su);

 }


자바는 포인터가 없기 때문에 메모리에 직접 접근할 일이 없다. 그러므로 비트연산을 할 이유가 없다.

형변환 casting

자동형변환

: 컴퓨터가 자동으로 변환 (값에 영향을 주지 않을 때. 즉, 표현의 범위에 영향을 주지 않을 때)

byte - short - int - long - float - double 의 순서.

실수는 근사값이니까 표현의 범위가 더 넓다.

강제형변환

: 프로그래머가 요청

char과 short가 똑같이 16비트 공간을 차지한다 하더라도, 자료의 표현범위는 둘이 다르기 때문에(short가 더 큼)

형변환시 강제로 변환해줘야한다.

 short s = 1; 

 char b = (char) s;

문자형

public static void main(String[] args){
	char ch1;
	ch1='A';
 	int su7=ch1;
	System.out.println(ch1);	     //A출력
	System.out.println(su7);	     //65 출력
	
	char ch2=65;
	System.out.println(ch2);	     // 캐릭터 형이기 때문에 A출력
    
    // 숫자 65를 캐릭터형으로 형변환했기 때문에 A출력
	System.out.println((char)65);  	

	System.out.println(1); 	        // 1출력. 숫자 1.
	System.out.println((int)'1');	// 49 출력. 문자형 1이 49니까.

    System.out.print((char)10);      // 개행은 10번이므로 개행이 출력된다.

    System.out.println('B'-'A');     
// 캐릭터에서 연산은 없으므로 int로 자동형변환되어 1이 출력된다. 
 }
}
개행 : System.out.print('\u000a');  ----윈도우에서 먹지 않음.

0개의 댓글

관련 채용 정보