1.4 Arithmetic Operators
- Conditional operators(삼항 연산자)
time < 12 ? "am" : "pm";
C++과 동일하게 삼항 연산자를 지원한다.
- Bit-wise operators and shift operators
- op1 & op2 : and 연산
- op1 | op2 : or 연산
- op1 ^ op2 : xor 연산
- ~op1 : not 연산
- op1>>op2 : op2 만큼 비트를 오른쪽으로 이동
- 한 번 이동에 값이 1/2 + 맨 오른쪽에 있는 비트는 사라짐(소수점 버림)
- op1<<op2 : op2 만큼 비트를 왼쪽으로 이동
- 한 번 이동에 값이 2배 + 맨 왼쪽에 있는 비트는 사라짐(소수점 버림)
ex) when a = 0xA7 (16진수)
- Bit assignment operator
&= |= ^= <<= >>=
ex>
위의 두가지 표현은 같은 결과를 가지고 온다.a = a&b a &=b
class opBit{
public static void main(String[] args){
char a = 0xA7
System.out.println("a : "
+ Integer.toString(a,16) + '\n');
System.out.println("a & F0 : "
+ Integer.toString(a & 0xF0,16) + '\n');
System.out.println("a | F0 : "
+ Integer.toString(a | 0xF0,16) + '\n');
System.out.println("a ^ F0 : "
+ Integer.toString(a ^ 0xF0,16) + '\n');
}
}
여기에서 Integer.toString은 Integer 클래스의 toString static 메소드를 사용한 것으로
Integer.toString(연산, 출력방식) 의 형태로 연산의 결과를 출력방식에 맞추어 반환한다. 여기에서는 16으로 입력하였기 때문에 16진수 문자열로 반환이 된다.
- 연산자 우선순위(시험)
1 // 2 // 3-4 // 5-7 // 8 // 9
만약 우선순위가 같다면 왼쪽에서 오른쪽으로 연산을 진행한다.
1순위의 assignment는 오른쪽에서 왼쪽으로 연산을 진행한다.
ex>
int x = 1,y=2,z;
z = x + y*2 - ++x + (y+=3);
원리
왼쪽에서 오른쪽으로 진행하는데 '=', '+', '-', '+' operator에서 연산자 우선순위가 걸린 곳에서 넘겨온 연산을 모두 수행상세순서
그래서 '=' 보다 '+'의 우선순위가 더 높기 때문에 '='를 넘어감
'+' 보다 ''의 우선순위가 더 높기 때문에 '+'를 넘어감
'' 보다 '-'의 우선순위가 낮기 때문에 '*'을 우선 수행
'+' 와 '-'는 우선순위가 같기 때문에 왼쪽('+')을 먼저 수행
'='보다 '-'의 우선순위가 높기 때문에 '-'을 넘어감
'-' 보다 '++x'의 우선순위가 높기 때문에 '++x'를 넘어감
'++x' 보다 '+'의 우선순위가 낮기 때문에 '++x'를 우선 수행
'-' 와 '+'는 우선순위가 같기 때문에 왼쪽('-')을 먼저 수행
'=' 보다 '+'의 우선순위가 높기 때문에 '+'를 넘어감
'+' 보다 '(' 의 우선순위가 높기 때문에 '('를 넘어감
'(' 다음부터 ')' 까지 계산이 이루어짐
'+' 다음 연산자가 없으니 '+' 연산 수행
'=' 다음 연산자 없으니 '=' 연산 수행연산순서 : x는 1, y*2 는 4, ++x는 2, y+=3 은 5
결과 : x는 2, y는 5, z는 8
ex>
int x=2, y=5, z=8;
System.out.println("x=y+=z : ",x=y+=z);
'=' 와 '+='의 연산자 우선순위는 같기 때문에 방향에 따라 y가 우선 13이 됨
이후 x에 13의 값이 입력됨
1.5 String
- 객체 생성
String location = "Java";
"Java" 자체가 String 타입의 Object
- concat 연산자
String greeting = "Hello " + location;
'+' 는 concat 연산자
- 자동 형변환
int age =42;
String output = age + " years";
age가 자동으로 String으로 형변환
- Static Methods
- join(기준, 문자열들...) : 수십개의 문자열을 기준을 가지고 붙이는 함수
```java
String names = String.join(", ","Peter","Paul","Mary");
```
- Instance Methods
- substring(이상, 미만) : 문자열 객체의 일부분을 잘르는 함수(0부터 시작, 이상~미만)
```java
String greeting = "Hello, World!";
String location = greeting.substring(7,12);
```
예외 적으로 substring(이상) 하면 이상부터 끝까지 반환
- split("기준") : 문자열을 기준을 가지고 분해
```java
String names = "Peter, Paul, Mary";
String[] result = names.split(", ");
```
- length : 문자열 길이를 반환(길이 이기 때문에 1부터 시작)
- equals(문자열) : 문자열이 같은지 확인 만약 같다면 true 반환 아니면 false 반환
- Wrapper Class
프로그램에 따라 기본 타입(Primitie Type)의 데이터를 객체로 취급해야 하는 경우가 생김
이때 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스라고 부름
- String 으로 갈거면 'toString'
- String 을 제외한 자료형으로 갈거면 'parse자료형'
int => String
int n = 42;
String str = Integer.toString(n);
String => int
String str = "101010";
int n = Integer.parseInt(str);
String <=> double
Double.toString <=> Double.parseDouble
'CS(Computer Science) > 20) 자바' 카테고리의 다른 글
자바를 자바 07 (0) | 2020.11.16 |
---|---|
자바를 자바 06 (0) | 2020.11.16 |
자바를 자바 05(String/input,output/Control Flow) (0) | 2020.11.16 |
자바를 자바 03 (0) | 2020.11.16 |
자바를 자바 01/02 (0) | 2020.11.16 |