목록Java (14)
현재
Java는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있다. String name1 = "홍길동"; String name2 = "홍길동"; 이렇게 생성하면 name1과 name2는 힙영역의 같은 번지를 가르킨다.
증감 연산자. 헷갈릴 경우가 있기 때문에 정리해두었다. a++ , 증감연산자가 뒤에 있으면 계산이 끝나고 더한다는 것을 의미한다. ++a , 증감연산자가 앞에 있으면 더하고 계산을 한다는 것을 의미한다. (예전에 대학교 다닐때 이게 너무 헷갈려서 이거랑 scanf때문에 C언어를 포기했었다... 어째서 나이먹은 지금이 더 이해가 되니??) public class P7 { public static void main(String[] args) { // 증감 연산자 int a = 10; a++; // 정답 System.out.println(a); // 예상값 12 a--; System.out.println(a); // 예상값 12 a = 10; ++a; // 사실상 이렇게 안씀 System.out.println..
데이터 타입이 일치하지 않으면 Syntax오류가 발생하므로 주의 해야한다. 타입을 맞춰주기 위해서 강제 타입 캐스팅을 하는데 값을 변경하면서 오류가 발생한다. 여기서 궁금했던 점은 작은값을 큰값으로 옮기는데는 메모리가 부족하니까 당연히 오류가 발생하지만 왜 큰 값에서 작은 값으로 옮길때도 오류가 발생하는지 찾아봤다. 찾아보니 타입 캐스팅이 단순히 메모리 공간에서 맨 왼쪽의 값을 버리는걸로 진행되는게 아니라 조금 더 복잡한 일련의 과정이 있기 때문에 오류가 난다는 것을 알게 되었다. (지금은 아직 공부할게 많아서 이 정도까지만 알고 넘어가기로 했다.... 나중에 더 자세히 찾아볼 기회가 있으면 좋겠다.) public class P2 { public static void main(String[] args) ..
문자는 사실상 숫자이므로 연산이 된다. (char) 추후 알고리즘 문제들을 통해서도 확인할 수 있다. 여기서 조금 봐둬야할것은 사용할 경우가 있는 16진법 정도이다. public class P1 { public static void main(String[] args) { // 리터럴, int a1 = 10; a1 = 0b0101; // 0b뒤에 2진수사용, 2진수 - 사용 안함 System.out.println(a1); a1 = 010; // 0뒤에 8진수 사용 System.out.println(a1); a1 = 0xA; // 16진수, 0x 뒤에 사용, A,B,C,D,E,F 순서대로 =10,11,12,13,14,15 System.out.println(a1); a1 = 0xAB; // 160 + 11 S..
1. 정수 타입 : byte(1byte), short(2byte), int(4byte), long(8byte) *1byte = 8bit 2. 실수 타입 : float(4byte), double(8byte) 3. 문자 타입 : char(2byte) 4. 논리 타입 : boolean(1bit) * 보통 1비트로 저장 되지만 구현값에 따라 다를 수 있다. 기본적으로 이렇게 정의되지만 사실상 특별한 경우가 아니면 반고정적으로 아래의 변수들을 쓴다. 정수 -> int , 실수 -> double, 문자 -> String, 논리 타입 -> boolean 추가로 int를 사용하기 좋은 이유는 연산자를 사용하면 연산자는 값을 int로 변환후 연산 하는 기능이 있기 때문에 오버헤드등 오류가 발생할 가능성이 있다. publ..