본문 바로가기

TIL/Java

[Java] 리터럴, 연산

Literal

Literal의 종류 (종류에 따라 사용할 수 있는 연산자가 다르다.)

숫자 문자 문자열 논리
정수-21, 실수-3.14 'a' "안녕하세요" true, false

주석

// 한줄주석 /*(이 사이에 쓰면서 Enter를 치면 여러줄 주석 가능)*/

public static void main(String[] args) {
		// 한줄 주석
		/* 여러줄 주석
		 * 하나
		 * 둘
		 * 셋
		 * 넷
		 * */

숫자 형태의 값

정수 형태의 값 출력 

		System.out.println(123);

실수 형태의 값 출력

		System.out.println(1.23);

문장 형태의 값

문자 형태의 값은 홑따옴표(single-quotation)으로 감싸주어야 한다.

		System.out.println('a');

두 개 이상은 문자열이기 때문에 에러가 발생한다.

		//System.out.println('ab');

아무 문자도 기록되지 않은 경우도 에러가 발생한다.

		//System.out.println('');

숫자 이지만 홑따옴표로 감싸져 있는 경우 문자 '1'이라고 판단한다.

		System.out.println('1');

문자열 형태의 값 출력

문자열은 문자 여러 개가 나열된 형태를 말하며 쌍따옴표(double-quotation)으로 감싸주어야 한다.

		System.out.println("안녕");

정수이지만 쌍따옴표로 감싸져있기 때문에 문자열로 보아야 한다.

		System.out.println("123");

아무 값도 없는 빈 쌍따옴표도 문자열로 취급한다.

		System.out.println("");

한 개의 문자로 쌍따옴표로 감싸면 문자열이다. (출력값은 같더라도 문자 a와는 다르다.)

		System.out.println("a");

논리 형태의 값 출력

true혹은 false 값을 논리형이라고 한다.

		System.out.println(true);
		System.out.println(false);

연산

값의 형태에 따라 사용할 수 있는 연산자의 종류와 연산의 결과가 달라진다.

 

숫자와 숫자의 연산

-정수와 정수의 연산

수학적으로 사용하는 사칙연산에 추가로 나머지를 구하는 mod를 사용할 수 있다.

		System.out.println(123 + 456);
		System.out.println(123 - 23);
		System.out.println(123 * 10);
		System.out.println(123 / 10);
		System.out.println(123 % 10);

-실수와 실수의 연산

실수끼리의 연산도 수학에서 사용하는 사칙연산에 나머지를 구하는 mod를 사용할 수 있다.

		System.out.println(1.23 + 1.23);
		System.out.println(1.23 - 0.23);
		System.out.println(12.3 * 10.0);
		System.out.println(1.23 / 10.0);
		System.out.println(1.23 % 1.0);

-정수와 실수의 연산

정수와 실수의 연산도 사칙 연산에 나머지를 구하는 mod를 사용할 수 있다.

정수와 실수 연산의 결과는 항상 실수가 나온다.


문자의 연산

-문자와 문자의 연산

문자끼리의 연산도 사칙연산에 mod 연산까지 가능하다.

이 때 출력값이 ab 일거라고 생각했지만, a, b자체 고유의 숫자를 가지고 있어 계산되어 나왔다.

		System.out.println('a' + 'b'); 		//195
		System.out.println('a' - 'b');		//-1
		System.out.println('a' * 'b');		//9506
		System.out.println('a' / 'b');		//0
		System.out.println('a' % 'b');		//97

-문자와 정수의 연산

문자에 정수를 연산하는 것도 가능하다.

문자 'a'와 숫자 1과 계산된 결과 문자 'a'는 숫자 97이라는 것을 알게된다.

컴퓨터는 문자를 인식하지 못하고 숫자로만 인식할 수 있기 때문에, 모든 문자에 대응되는 숫자들이 매칭이 되어 있다.

(아스키코드 표 참조)

		System.out.println('a' + 1);		//98
		System.out.println('a' - 1);		//96
		System.out.println('a' * 1);		//97
		System.out.println('a' / 1);		//97
		System.out.println('a' % 1);		//0

-문자와 실수의 연산

실수도 숫자이기 때문에 정수의 연산처럼 모든 연산이 가능하다.

		System.out.println('a' + 1.0);		//98.0
		System.out.println('a' - 1.0);		//96.0
		System.out.println('a' * 2.0);		//194.0
		System.out.println('a' / 2.0);		//48.5
		System.out.println('a' % 2.0);		//1.0

결론 : 문자는 내부적으로 숫자로 취급된다.


문자열의 연산

-문자열과 문자열의 연산

문자열과 문자열의 '+' 연산 결과는 문자열 합치기(이어 붙이기)가 된다.

문자열은 '+' 연산 외에 다른 연산을 사용하지 못한다.

		System.out.println("hello" + "world");
		//System.out.println("hello" - "world");
		//System.out.println("hello" * "world");
		//System.out.println("hello" / "world");
		//System.out.println("hello" % "world");

-문자열과 다른 형태의 값 연산

문자열과의 연산은 '+' 연산만 가능하다.

연산 결과는 다른 형태의 값들도 문자열로 취급하여 문자열 합치기(이어 붙이기) 결과가 나오게 된다. 

 

-문자열과 정수의 연산

		System.out.println("helloworld" + 123);		//helloworld123

-문자열과 실수의 연산

		System.out.println("helloworld" + 123.456);		//helloworld123.456

-문자열과 문자의 연산

		System.out.println("hellworld" + 'a');		//helloworlda

-문자열과 논리값의 연산

		System.out.println("helloworld" + true);	//helloworldtrue

논리값 연산

-논리값과 논리값 연산

논리값끼리의 연산은 모든 연산자 사용이 불가능하다.

		//System.out.println(true + false);
		//System.out.println(true - false);
		//System.out.println(true * false);
		//System.out.println(true / false);
		//System.out.println(true % false);

논리값과 정수의 연산은 모든 연산자 사용이 불가능하다.

		//System.out.println(true + 1);
		//System.out.println(true - 1);
		//System.out.println(true * 1);
		//System.out.println(true / 1);
		//System.out.println(true % 1);

-논리값과 실수의 연산

논리값과 실수의 연산은 모든 연산자 사용이 불가능하다.

 

-논리값과 문자의 연산

논리값과 문자의 연산은 모든 연산자 사용이 불가능하다.

이유는, 문자는 내부적으로 숫자 취급을 하기 때문에 결국 논리값과 숫자의 연산과 동일한 의미이다.

 

-논리값과 문자열의 연산

논리값과 문자열의 연산은 '+' 연산자만 사용 가능하다.

이유는, 위에서 테스트 해 본 문자열 합치기가 되는 원리와 동일하다.

		System.out.println(true + "a");		//truea

 문자열 합치기

-두 개의 문자열 합치기

		System.out.println(9 + 9);		//18
		System.out.println("9" + 9); 	//99
		System.out.println(9 + "9");	//99
		System.out.println("9" + "9"); 	//99

-세 개의 문자열 합치기

연산의 방향은 왼쪽에서 오른쪽이다. (숫자부터 합쳐짐)

왼쪽의 연산부터 수행하고 수행결과를 오른쪽과 연산함

		System.out.println(9 + 9 +"9");		//189
		System.out.println(9 + "9" + 9);	//999
		System.out.println("9" + 9 + 9);	//999

마지막 줄 결과가 918이 나오게 하고 싶으면, "9" + (9 + 9)로 괄호 안의 것을 먼저 연산하게 해줘야 한다.