Java의 플랫폼 독립성

  • ‘플랫폼 독립성’은 특정 플랫폼에 의존적이지 않다는 것을 의미
  • Java는 컴파일하면 .class 파일을 생성하고 JVM 위에서 실행된다. 그래서 운영체제가 달라도 실행가능하다
  • 하지만 C++은 컴파일하면 어셈블리어->기계어->실행파일이 나오는데 해당 플랫폼의 어셈블리어에 맞게 변환되어 다른 플랫폼에선 실행이 안된다
  • 예를 들어 windows 실행파일은 linux에서 사용안되고 그 반대도 마찬가지 이다
  • Java의 단점은 JVM 위에 있어서 느리다. 그래서 플랫폼과 상관없는 웹에서 사용된다

데이터 기본 리터럴

  • 10 => int
  • 3.14 => double
  • ’ ‘ => char
  • ” “ => String ( 기본적인 자료형이 아니다. char로 문자열 사용하기 불편해서 사용 )
  • float value = 3.14; 하면 에러가 나서 3.14f처럼 형변환을 해야한다.
  • 그런데 short, long 변수에 정수값을 줄 땐 형변환 에러 안나는데 왜 float만 난다.
  • 아마 소수점끼리 형변환하면 소실되는 값이 있으니까 에러 내는 듯 하다.
  • double에 정수 대입은 에러 안남
double d = 3.14+1;

System.out.println(d);
if(a == 4.14)
{
	System.out.println("같다");
}
else
{
	System.out.println("다르다");			
}
  • 결과는 다르다 출력.
  • d를 출력하면 4.140000000000001 이 나온다

데이터타입에 따른 출력 결과

데이터타입에 따라 결과가 달라질 수 있다

char c = 'A'
System.out.println(c); 결과 A
System.out.println((int)c); 결과 65

소수점 둘째자리까지 실수를 표현하고 싶다면?

System.out.printf("평균:%.2f", avg);

casting(형변환)

  • byte < short < int < long < float < double < String
  • 큰자료형 = 큰 자료형+작은 자료형(묵시적 형변환)
  • 큰자료형과 작은자료형을 더하면 큰 자료형이 된다.
  • 아래처럼 연산결과를 작은자료형으로 받으면 에러난다.
int n1 = 10;
double n2 = 3.14;
int re = n1+n2;
		
short b1 = 10000;
byte a = 1 + b1;

casting String <=> 정수형, 실수형

  • 모든 정수는 String과 연산하면 String이 된다
String n3 = 10 + 5 + "0";
System.out.println(n3);

결과 150

final 변수

  • 변수에 값을 딱 한번만 대입할 수 있다(값변경x)

증감 연산자 우선순위

int n7 = 10;
int n8 = 2;
int n9 = n7-- - n8;		// 10 - 2 한다음 n7은 1뺀다
System.out.println(n9);
  • 연산자 우선순위대로 연산한다.
  • –가 모든 연산이 끝난 후 실행하는 후위연산자이기 때문에 10 - 2 를 해서 n9는 8이 되고 n7은 9가 된다

String 비교

  • String 값이 같은지 비교할 땐 == 연산자가 아닌 String.equals 함수 사용
  • == 연산자는 주소값이 같은지 비교
String str1 = "abc";
String str2 = "abc";
  • str1 == str2는 true이다. 처음 abc 글자를 str1에 대입하면 “abc” 단어가 없으므로 등록된다.
  • str2값에 “abc”를 넣으면 메모리에 “abc” 글자가 있는지 찾아보고 있으므로 같은 메모리 주소를 전달한다.