728x90
>> Math 클래스
- java.lang 이라는 패키지 안에 존재한다.
- 모든 필드와 메소드가 다 static으로 되어있다.
- 객체를 생성할 필요가 없으므로 생성자가 private이다.
// 파이 => Math클래스 내에 상수필드로 정의되어있음
System.out.println("파이 " + Math.PI);
// 메소드
// 메소드명(매개변수 타입)
// 1. 올림 => math.ceill(double) : 반환형 double
double num1 = 4.424242;
System.out.println("올림 : " + Math.ceil(num1));
// 2. 반올림 => Math.round(double) : 반환형 long
System.out.println("반올림 : " + Math.round(num1));
// 3. 버림 => Math.floor(double) : 반환형 double
System.out.println("버림 : " + Math.floor(num1));
// 4. 절대값 => Math.abs(int/double/long/float)
// : 반환형 int/double/long/float 그대로
int num2 = -13;
System.out.println("절대값 : " + Math.abs(num2));
// 5. 최솟값 => Math.min(int, int) : 반환형 int
System.out.println("최솟값 : " + Math.min(5, 10));
// 6. 최댓값 => Math.max(int, int) : 반환형 int
System.out.println("최댓값 : " + Math.max(5, 10));
// 7. 제곱근(루트) =// 7. 제곱근(루트) => Math.sqrt(double) : 반환형 double
System.out.println("4의 제곱근 : " + Math.sqrt(4));
// 8. 제곱 => Math.pow(double, double): 반환형 double
System.out.println("2의 10제곱: " + Math.pow(2,10));
728x90
>> 첫글자를 대문자로 바꾸는 예제
public void method() {
System.out.print("영어를 입력하시오(띄어쓰기 포함) : ");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] arr = str.split(" ");
for(String s : arr) {
String s1 = s.substring(0,1);
String sFirst = s1.toUpperCase();
String s2 = s.substring(1);
String sAll =sFirst.concat(s2);
System.out.print(sAll + " ");
}
}
public void method1() {
System.out.print("영어를 입력하시오(띄어쓰기 포함) : ");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] arr = str.split(" ");
for(String s : arr) {
System.out.print(s.toUpperCase().charAt(0)
+ s.substring(1,s.length()) + " ");
}
}
728x90
>> 문자열 비교 toString() / equals() / hashCode()
// 1. 생성자를 통해서 문자열 담기
public void method1() {
String str1 = new String("hello");
String str2 = new String("hello");
// toString() 메소드
System.out.println(str1/*.toString()*/);
System.out.println(str2);
// 1. String 클래스의 toString() 메소드의 경우
// 실제 담겨있는 문자열을 반환하게끔 오버라이딩이 되어 있음
// equals() 메소드
System.out.println(str1.equals(str2));
// true => 문자열의 내용을 비교해봤는데 동일하다
// 2. String 클래스의 equals() 메소드의 경우
// 주소값 비교가 아닌 문자열 비교를 하도록 오버라이딩
// hashCode() 메소드
// 16진수 주소값 -> 10진수의 형태로
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// 3. String 클래스의 hashCode()
// 주소값을 변환해주는 것이 아닌 실제 담긴 문자열을 기반으로
// 해시코드 값을 만들어서 반환
// 진짜 주소값을 알고 싶다면?
// System.identityHashCode(참조형변수명) ;
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
// 실제 주소값의 해시코드를 출력
// str1 과 str2의 주소값이 다르다!
// == 주소값 동등비교
System.out.println(str1 == str2); // false
}
// 2. 문자열을 리터럴로 생성
public void method2() {
String str1 = "hello";
String str2 = "hello";
//toString 메소드
System.out.println(str1);
System.out.println(str2);
//equals 메소드
System.out.println(str1.equals(str2)); //true
// hashCode 메소드
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// System.identityHashCode()
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
// ? 두 개의 찐주소값이 똑같다?
System.out.println(str1 == str2); // true
}
// String 클래스 String Pool
public void method3() {
String str = "hello";
// 리터럴 대입 시 String Poll 영역에 올라감
// String Pool의 특징 : 동일한 애용의 문자열이 존재 불가하다
System.out.println(System.identityHashCode(str));
str = "goodbye";
System.out.println(System.identityHashCode(str));
// 연결이 끊긴 문자열들은 가비지 콜렌터가 알아서 정리해줌
// 불변이라고 해서 아예 수정이 안되는 것이 아니라
// 매번 새로운 주소값을 참조한다 라는 뜻
str += "abc";
System.out.println(System.identityHashCode(str));
str += "abc";
System.out.println(System.identityHashCode(str));
String a = "a";
String b = "a";
System.out.println("결과 : " + a == b); // false
System.out.println("결과 : " + (a == b)); // 결과 : true
}
public void method4() {
// StringBuffer
// 문자열은 안에 내용이 변경될 때마다 새로운 공간을 할당하고 새로 집어넣는다.
// 이를 막기 위해 임시공간(buffer)을 하나 준비하여
// 임시공간에 차곡차곡 담아두었다가 한번에 처리해주는 클래스가
// StringBuffer / StringBuilder 이다.
StringBuffer sb = new StringBuffer();
sb.append("Hello");
System.out.println("Hello".hashCode());
System.out.println(sb.hashCode());
sb.append(" world!");
System.out.println("Hello World!".hashCode());
System.out.println(sb.hashCode());
String str = sb.toString();
System.out.println("결과 : " + sb);
// StringBuffer는 동시제어 기능(Thread Safe)기능을 가진다.
// 하지만, 간단한 프로그램 구현이나, 동시제어를 다른 프로그램이 제공하는 경우
// 굳이 버퍼까지..? 동시제어를 구현할 필요는 없다 -- TooMuch
// 이 기능만 쏙 뺀 클래스가 필요했는데 그게 StringBuilder.
}
public void method5() {
// StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("Hello");
System.out.println("Hello".hashCode());
System.out.println(sb.hashCode());
sb.append(" World!");
System.out.println("Hello World!".hashCode());
System.out.println(sb.hashCode());
System.out.println("결과 : " + sb);
}
728x90