time < 12 ? "am" : "pm";
C++과 동일하게 삼항 연산자를 지원한다.
- 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진수)
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의 값이 입력됨
String location = "Java";
"Java" 자체가 String 타입의 Object
String greeting = "Hello " + location;
'+' 는 concat 연산자
int age =42;
String output = age + " years";
age가 자동으로 String으로 형변환
- join(기준, 문자열들...) : 수십개의 문자열을 기준을 가지고 붙이는 함수
```java
String names = String.join(", ","Peter","Paul","Mary");
```
- 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 반환
프로그램에 따라 기본 타입(Primitie Type)의 데이터를 객체로 취급해야 하는 경우가 생김
이때 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스라고 부름
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