1.4 Arithmetic Operators
Conditional operators(삼항 연산자)
time < 12 ? "am" : "pm";
Java
복사
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배 + 맨 왼쪽에 있는 비트는 사라짐(소수점 버림)
Java
복사
ex) when a = 0xA7 (16진수)
•
Bit assignment operator
&= |= ^= <<= >>=
ex>
a = a&b
a &=b
Java
복사
위의 두가지 표현은 같은 결과를 가지고 온다.
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');
}
}
Java
복사
여기에서 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);
Java
복사
•
원리
왼쪽에서 오른쪽으로 진행하는데 '=', '+', '-', '+' 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);
Java
복사
'=' 와 '+='의 연산자 우선순위는 같기 때문에 방향에 따라 y가 우선 13이 됨
이후 x에 13의 값이 입력됨
<br><br>
1.5 String
객체 생성
String location = "Java";
Java
복사
"Java" 자체가 String 타입의 Object
concat 연산자
String greeting = "Hello " + location;
Java
복사
'+' 는 concat 연산자
자동 형변환
int age =42;
String output = age + " years";
Java
복사
age가 자동으로 String으로 형변환
Static Methods
- join(기준, 문자열들...) : 수십개의 문자열을 기준을 가지고 붙이는 함수
```java
String names = String.join(", ","Peter","Paul","Mary");
```
Java
복사
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 반환
Java
복사
Wrapper Class
프로그램에 따라 기본 타입(Primitie Type)의 데이터를 객체로 취급해야 하는 경우가 생김
이때 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스라고 부름
•
String 으로 갈거면 'toString'
•
String 을 제외한 자료형으로 갈거면 'parse자료형'
int => String
int n = 42;
String str = Integer.toString(n);
Java
복사
String => int
String str = "101010";
int n = Integer.parseInt(str);
Java
복사
String <=> double
Double.toString <=> Double.parseDouble