부호를 가지며, 소수가 없습니다.
정수형 데이터 타입을 결정 할 때는 사용하고자 하는 데이터의 최대크기를 고려해서 결정해야 합니다.
해당 타입이 표현 할 수 있는 범위를 벗어아면 오버플로우가 발생해 전혀 다른 값이 저장 됩니다.
public static void main(String[] args) {
byte num1 = 127;
byte num2 = -128;
num1++; // 127 + 1
num2--; // -128 - 1
System.out.println(num1); // -128
System.out.println(num2); // 127
}
float형과 double형이 있으며, double형이 실수형의 기본 타입 입니다
컴퓨터에서 실수를 표현하는 방법은 정수에 비해 훨씬 복잡 합니다.
현재 부동 소수점 방식을 사용하며, 고정 소수점 방식에 비해 훨씬 더 많은 범위까지 표현 할 수 있습니다.
하지만, 컴퓨터에서 실수를 표현하는 방법은 정확한 값이 아니라 언제자 근사치를 표현하므로 오차가 발생 합니다.
public class Float {
public static void main(String[] args) {
double num1 = 0.1;
for(int i = 0; i < 1000; i++) {
num1 += 0.1;
}
System.out.println(num1);
}
}
변수란? 값을 저장할 수 있는 메모리 공간에 이름을 붙여 놓은 것.
프로그램은 변수를 통해 특정 번지에 값을 저장하고 일을 수 있습니다.
대부분의 프로그래밍 언어는 메모리 공간에 저장할 위치를 운영체제가 결정하지만 자바는 JVM이 합니다.
(JVM이 운영체제로 부터 대량의 메모리를 미리 할당 받아두고 이를 재 할당)
자바는 데이터형이 존재하는 언어 이기 때문에 선언시 사용 데이터에 맞는 자료형을 선언해야 합니다.
변수를 사용하기 위해서는 먼저 변수를 선언해야 합니다. 변수의 선언은 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지를 결정해야 합니다.
int age; // 정수값을 저장할 수 있는 age 변수 선언
double value; // 실수값을 저장 할 수 있는 value 변수 선언
자바에서는 변수 뿐만 아니라 클래스, 매소드 등의 이름을 짓는데 반드시 지켜야 하는 공통된 규칙이 있습니다.
변수의 이름은 해당 변수에 저장될 데이터의 의미를 잘 나타내도록 짓는 것이 좋습니다.
[참고] 자바의 키워드
abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
[참고] 변수명을 잘못 사용한 경우
int 1st; // 변수명은 숫자로 시작할 수 없다.
int a#; // 변수명에 특수문자를 사용할 수 없다.
int class; // 키워드를 변수명으로 사용할 수 없다.
자바에서는 다음과 같이 8가지 종류의 기본형 변수를 제공하고 있습니다.
자바에서는 변수를 사용하기 전에 반드시 먼저 변수를 선언하고 초기화해야 합니다.
변수를 선언하는 방법에는 다음과 같이 두 가지 방법이 있습니다.
int num1, num2; // 같은 타입의 변수를 동시에 선언함.
double num3 = 3.14; // 선언과 동시에 초기화함.
double num4 = 1.23, num5 = 4.56; // 같은 타입의 변수를 동시에 선언하면서 초기화함.
int hour = 3;
int minute = 5;
System.out.println(hour + "시간" + minute + "분");
int test;
System.out.println(test); // 선언 이후 초기화 없이 사용하였으므로 에러 발생
class NameCard{
String name;
int age;
String addr;
String eMail;
String phoneNum;
}
변수에 값을 저장 할 때는 대입연산자(=)를 사용 합니다.
수학에서 등호(=) 같다는 표시이지만 프로그래밍 언어에서는 오른쪽 값을 왼쪽 변수에 저장 한다는 의미 입니다.
int score = 90;
public static void main(String[] args) {
int value = 10; // 로컬 변수 { }
int sum = value + 20;
System.out.printf("%d\n", sum);
}
public static void main(String[] args) {
int n = 20;
if (n > 10) {
int m = 30; // 조건문 내의 지역 변수
m = n - 10;
}
int k = n + m;
}
상수(constant)란 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미합니다.
하지만 상수가 변수와 다른 점은 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다는 점입니다.
자바에서는 final 키워드를 사용하여 선언
final int AGES = 30;
import java.util.Scanner;
public class Final {
public static void main(String[] args) {
final double taxRate = 0.10;
Scanner sc = new Scanner(System.in);
System.out.print("수입을 입력 하세요 : ");
int income = sc.nextInt();
System.out.println("당신의 내야 할 세금은 " + income * taxRate);
}
}
하나의 타입을 다른 타입으로 바꾸는 것을 타입 변환이라고 합니다.
자바에서는 다른 타입끼리 연산의 경우 모두 같은 타입으로 변환이 후 수행이 됩니다.
자동 타입 변환은 유리한 방향으로 일어 납니다.
int num1 = 1, num2 = 4;
double result1 = num1 / num2; // 묵시적 형변환
double result2 = (double) num1 / num2; // 명시적 형변환
System.out.println(result1);
System.out.println(result2);
System.out.println(""+ result1 + 10); // 연산자 우선순위에 의해서 문자열로 간주 됩니다.
System.out.println(result1 + 10 + "10"); // 먼저 숫자형 타입이 계산되고 문자열이추가 됩니다.
`Integer.parseInt(test);` 문자열을 정수 int 타입으로 변환 합니다.
`Double.parseDouble(test);` 문자열을 실수 double 타입으로 변환 합니다.
진수 표현
public class IntLiteral {
public static void main(String[] args) {
int var1 = 0b1010; // 2진수
int var2 = 0206; // 8진수
int var3 = 365; // 10진수
int var4 = 0xB3; // 16진수
System.out.println("var1: " + var1);
System.out.println("var1: " + var2);
System.out.println("var1: " + var3);
System.out.println("var1: " + var4);
}
}