④ Math클래스와 메서드
: Math클래스는 수학 관련 static메서드의 집합이다.
- Math클래스의 메서드
메서드//설명 | 예제 | 결과 |
static double abs(double a) static float abs(float f) static int abs(int f) static long abs(long f) //주어진 값의 절대값을 반환한다. |
int i= Math.abs(-10); double d=Math.abs(-10.0) |
i=10 d=10.0 |
static double ceil(double a) //주어진 값을 올림하여 반환한다. |
double d=Math.ceil(10.1); double d2=Math.ceil(-10.1); double d3=Math.ceil(10.000015); |
d=11.0 d2=-10.0 d3=11.0 |
static double floor(double a) //주어진 값을 버림하여 반환한다. |
double d=Math.floor(10.8); double d2=Math.floor(-10.8); |
d=10.0 d2=-11.0 |
static double max(double a, double b) static float max(float a, float b) static int max(int a, int b) static long max(long a, long b) //주어진 두 값을 비교하여 큰 쪽을 반환한다. |
double d=Math.max(9.5, 9.50001); int i=Math.max(0, -1); |
d=9.50001 i=0 |
static double min(double a, double b) static float min(float a, float b) static int min(int a, int b) static long min(long a, long b) //주어진 두 값을 비교하여 작은 쪽을 반환한다. |
double d=Math.min(9.5, 9.50001); int i=Math.min(0, -1) |
d=9.5 i=-1 |
static double random() //0.0~1.0범위의 임의의 double값을 반환한다. (1.0은 범위에 포함되지 않는다.) |
double d=Math.random(); int i=(int)(Math.random()*10)+1 |
0.0<=d<1.0 1<=i<11 |
static double rint(double a) //반올림하여 반환한다. 단, 정가운데 있는 값(1.5, 2.5, 3.5등)은 짝수를 반환한다. |
double d=Math.rint(1.2); double d2=Math.rint(2.6); double d3=Math.rint(3.5); double d4=Math.rint(4.5); |
d=1.0 d2=3.0 d3=4.0 d4=4.0 |
static long round(double a) static long round(float a) //반올림하여 반환한다. |
long l=Math.round(1.2); long l2=Math.round(2.6); long l3=Math.round(3.5); double d=90.7552; double d2=Math.round(d*100)/100.0; |
l=1 l2=3 l3=4 d=90.7552 d2=90.76 |
- Math클래스 예제
import static java.lang.Math.*;
class JavaJungsuk_MathClass_Ex9_13 {
public static void main(String args[]){
double val=90.7552;
System.out.println("round("+val+")="+round(val)); //반올림
val*=100;
System.out.println("round("+val+")="+round(val)); //반올림
System.out.println("round("+val+")/100 ="+round(val)/100);
System.out.println("round("+val+")/100.0="+round(val)/100.0);
System.out.println();
System.out.println("ceil(%3.1f)=%3.1f%n", 1.1, ceil(1.1)); //올림
System.out.println("floor(%3.1f)=%3.1f%n", 1.5, floor(1.5)); //버림
System.out.println("round(%3.1f)=%d%n", 1.1, round(1.1)); //반올림
System.out.println("round(%3.1f)=%d%n", 1.5, round(1.5)); //반올림
System.out.println("rint(%3.1f)=%f%n", 1.5, rint(1.5)); //반올림
System.out.println("round(%3.1f)=%d%n", -1.5, round(-1.5)); //반올림
System.out.println("rint(%3.1f)=%f%n", -1.5, rint(-1.5)); //반올림
System.out.println("ceil(%3.1f)=%f%n", -1.5, ceil(-1.5)); //올림
System.out.println("floor(%3.1f)=%f%n", -1.5, floor(-1.5)); //버림
}
}
결과
round(90.7552)=91
round(9075.52)=9076
round(9075.52)/100=90
round(9075.52)/100.0=90.76
ceil(1.1)=2.0
floor(1.5)=1.0
round(1.1)=1
round(1.5)=2
rint(1.5)=2.000000
round(-1.5)=-1
rint(-1.5)=-2.000000
ceil(-1.5)=-1.000000
floor(-1.5)=-2.000000
⑤ 래퍼(wrapper) 클래스
: 기본형을 감싸는 클래스.
- 기본형 중 char와 int를 제외하고 표기법이 같다.
char → Character
int → Integer
- 래퍼클래스를 사용하는 경우
: 기본형 변수도 어쩔 수 없이 객체로 다뤄야하는 경우.
예로들면 매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 사용한다.
- 래퍼 클래스 예제
class JavaJungsuk_WrapperClass_Ex9_14 {
public static void main(String[] args) {
Integer i =new Integer(100);
Integer i2=new Integer(100);
System.out.println("i==i2?"+(i==i2));
System.out.println("i.equals(i2)?"+i.equals(i2));
//compareTo는 같으면 0, (오른쪽값이) 작으면 양수, (오른쪽값이) 크면 음수 반환
System.out.println("i.compareTo(i2)="+i.compareTo(i2));
System.out.println("i.toString()="+i.toString());
System.out.println("MAX_VALUE="+Integer.MAX_VALUE); //+20억
System.out.println("MIN_VALUE="+Integer.MIN_VALUE); //-20억
System.out.println("SIZE="+Integer.SIZE+"bits");
System.out.println("BYTES="+Integer.BYTES+"bytes");
System.out.println("TYPE="+Integer.TYPE);
}
}
결과
i==i2?false
i.equals(i2)?true
i.compareTo(i2)=0
i.toString()=100
MAX_VALUE=2147483647
MIN_VALUE=-2147483647
SIZE=32bits
BYTES=4bytes
TYPE=int
→ 래퍼 클래스는 모두 equals()가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다.
또한 toString()도 오버라이딩 되어 있어서 객체가 가지고 있는 값을 문자열로 변환하여 반환한다.
⑥ 오토박싱 & 언박싱
: 기본형 값을 래퍼 클래스의 객체로 자동변환 해주는 것을 오토박싱(int → Integer)이라 하고,
반대로 변환하는 것을 언박싱(int ← Integer)이라 한다.
컴파일 전의 코드 | 컴파일 후의 코드 |
int i=5; Integer iObj=new Integer(7); int sum=i+iObj; |
int i=5; Integer iObj=new Integer(7); int sum=i+iObj.intValue(); // 기본형으로 자동변환! |
- 오토박싱 & 언박싱 예제
class JavaJungsuk_AutoBoxing_UnBoxing_Ex9_16 {
public static void main(String[] args) {
int i=10;
Integer intg=(Integer)i; //Integer intg=Integer.valueOf(i);
Object obj=(Object)i; //Object obj=(Object)Integer.valueOf(i);
Long lng=100L;
int i2=intg+10;
long l=intg+lng;
Integer intg2=new Integer(20);
int i3=(int)intg2;
Integer intg3=intg2+i3;
System.out.println("i="+i);
System.out.println("intg="+intg);
System.out.println("obj="+obj);
System.out.println("lng="+lng);
System.out.println("intg+10="+i2);
System.out.println("intg+lng="+l);
System.out.println("intg2="+intg2);
System.out.println("i3="+i3);
System.out.println("intg2+i3="+intg3);
}
}
결과
i=10
intg=10
obj=10
lng=100
intg+10=20
intg+lng=110
intg2=20
i3=20
intg2+i3=40
→ 위 예제에서 알 수 있듯이 기본형과 참조형은 서로 형변환이 가능(형변환 생략가능)하고,
참조형과 기본형간의 연산도 가능하다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_컬렉션 프레임웍(1) (0) | 2022.12.21 |
---|---|
Java_날짜와 시간&형식화 (0) | 2022.12.18 |
Java_java.lang패키지와 유용한 클래스(3)_StringBuffer클래스 (0) | 2022.12.10 |
Java_java.lang패키지와 유용한 클래스(2)_String클래스 (0) | 2022.12.07 |
Java_java.lang패키지와 유용한 클래스(1)_Object클래스의 메서드 (0) | 2022.12.04 |