char 변수는 유니코드(정수)로 저장 되므로 정수형 또는 실수형과 연산 가능
int 는 +-약 20억 -> 코테 공부할때 알면 좋음
long은 약 19자리까지 표현가능
프리미티브 타입 : boolean, char, byte, short, int, long, float, double
레퍼런스 타입 : 프리미티브 타입을 제외한 모든 타입
ex) class, interface, enum, array, String type
final int MAX_SPEED =10;
구체적인 숫자나 문자
리터럴 -> 구체적인 숫자나 문자
변수나 상수를 안쓰고 리터럴로만 할수도 있잖아!
-> 우린 이걸 하드코딩이라고 부르기로 했어요
int triangleArea = (20*10)/2;
int rectangleArea = 20 * 10;
//여기서 20과 10이 길이 높이인데 변경하고 싶다면 위아래 4군데를 고쳐야함
//이 방식은 하드코딩(리터럴 사용)을 한셈.
final int WIDTH = 20; // 여기서 길이와
final int HEIGHT = 10; // 높이를 변경해주면 아래에 코드에도 자동으로 반영
int triangleArea = (WIDTH*HEIGHT)/2;
int rectangleArea = WIDTH * HEIGHT;
//유지보수가 굉장히 유용하다는 장점
char ch = 'A';
char ch = 65; //둘은 동일
char ch =''; //불가, 빈문자
char ch =' '; //스페이스(공백) 은 허용
String name = new String("name");
String name = "Ja";
name += "va";
심화
간단히만 알아놓자 나중에 String 클래스에 대해서 배울 때 제대로 공부할거임.
- 왜? 사용하지말아야하나?
* String은 불변객체 -> 변하지 않는 객체
처음 name이 참조하고 있는 객체 “Ja”에 “va”를 붙이는 것이 아님
“Ja”에 대한 참조값을 Name이 버리고 “Java”라는 새로운 객체를 만들어 참조를 연결
name이 이전에 가르키던 참조값 “Ja”는 GC의 대상이 된다.- 그럼 자주 변경될 땐 뭘 사용해야하나? StringBuilder 혹은 StringBuffer 의 append 메소드를 사용하자
int a; //선언
a = 10; //초기화
int b = 20; //선언과 동시에 초기화
class ScopeLifeTime{
static String staticVal = "스태틱변수/클래스변수";
String globalVal = "전역변수/인스턴스 변수";
public void scopeTest(){
String localVal = "지역변수";
System.out.println(staticVal);
System.out.println(globalVal);
System.out.println(localVal);
}
public void scopeTest2(){
System.out.println(staticVal);
System.out.println(globalVal);
System.out.println(localVal);
}
public static void main(String[] args){
System.out.println(staticVal);
System.out.println(globalVal);
System.out.println(localVal);
}
}
타입변환
long num = 1L;
int a = (int)num;
int num = 1;
long a = num;
//1차원 배열
int[] array_1 = new int[10]; //1차원 배열 선언과 0 초기값 초기화
int[] array_1 = {1,2,3,4,5}; // 길이가 5인 1차원배열 1,2,3,4,5로 초기화
int[] array_1 = new int[] {1,3,5,2,4}; // 길이가 5인 1차원 배열 1,3,5,2,4 로 초기화
String[] weeks = {"월","화","수","목","금","토","일"}; //길이가 7인 String배열 선언과 동시 초기화
Student[] students = new Student[10]; // 객체 배열 선언, null값이 들어있음
for(Student s : students){
s = new Student(); // 이래야 객체 배열의 각 인덱스에 해당하는 오브젝트들이 초기화됨
}
//2차원 배열
int[][] array_2 = new int[10][10]; // 10X10 , [행][열] 순서
int[][] array_2 = new int[][] {{1,2,3}, {4,5,6}};
class VarCheck{
public var a = "이건 클래스의 멤버변수"; //컴파일 에러
public void method(){
var b = "이건 지역변수"; //사용가능
var arraylist = new ArrayList<String>(); //사용가능, String타입으로 초기화
var arraylist = new ArrayLIst<>(); //object 타입으로 초기화
//명시적인 타입이 있을 때 반복문 사용
int[] nums = {1,2,3};
for(var n : nums){
System.out.println(n);
}
var c; //컴파일 에러 , 초기화 안함
var d = null; //컴파일 에러 , null로 초기화하면 타입추론 불가
var arr = {1,2,3}; //컴파일 에러, 배열도 타입추론 불가
var f = () -> { }; //컴파일 에러, 람다도 사용 불가
}
}