왜 방법 String.valueOf(int i)
이 존재 하는지 궁금 합니다. 나는 변환하려면이 방법을 사용하고 있습니다 int
에 String
그냥 발견 Integer.toString(int i)
방법.
이 메소드의 구현을 살펴본 후 첫 번째 메소드가 두 번째 메소드를 호출하는 것을 보았습니다. 결과적으로 String.valueOf(int i)
직접 전화하는 것보다 하나 이상의 전화 를 포함하는 모든 전화Integer.toString(int i)
답변
똑같은 일을하는 두 가지 다른 방법. 역사적인 이유 일 수 있습니다 (하나가 다른 것보다 먼저 왔는지 기억할 수 없음).
답변
문자열 타입에는 여러 가지 메소드 valueOf가 있습니다.
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(Object obj)
우리가 볼 수 있듯이 그 방법은 모든 종류의 숫자를 해결할 수 있습니다
제시 한 특정 방법의 모든 구현 : 정수의 경우
Integer.toString(int i)
더블
Double.toString(double d)
등등
제 생각에는 이것은 역사적인 일이 아니지만 개발자가 valueOf
변경 사항이 적기 때문에 개발자가 올바른 유형보다 String 클래스 의 메소드를 사용하는 것이 더 유용합니다 .
샘플 1 :
public String doStuff(int num) {
// Do something with num...
return String.valueOf(num);
}
샘플 2 :
public String doStuff(int num) {
// Do something with num...
return Integer.toString(num);
}
샘플 2에서 볼 수 있듯이 샘플 1과 달리 두 가지 변경을 수행해야합니다.
결론적 valueOf
으로 String 클래스 의 메소드를 사용하는 것이 더 유연하므로 거기에서 사용할 수 있습니다.
답변
한 가지 큰 차이점은 toString()
null 객체 를 호출 하면 null을 얻지 못하는 NullPointerException
반면에 null을 얻는다는 것 String.valueOf()
입니다.
답변
String 클래스는 모든 기본 유형과 객체 유형에 valueOf 메소드를 제공하므로 하나의 클래스를 통해 모두 액세스 할 수있는 편리한 메소드라고 가정합니다.
NB 프로파일 링 결과
평균 intToString = 5368ms, 평균 stringValueOf = 5689ms (100,000,000 개의 작업)
public class StringIntTest {
public static long intToString () {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
String j = Integer.toString(i);
}
long finishTime = System.currentTimeMillis();
return finishTime - startTime;
}
public static long stringValueOf () {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
String j = String.valueOf(i);
}
long finishTime = System.currentTimeMillis();
return finishTime - startTime;
}
public static void main(String[] args) {
long intToStringElapsed = 0;
long stringValueOfElapsed = 0;
for (int i = 0; i < 10; i++) {
intToStringElapsed += intToString();
stringValueOfElapsed+= stringValueOf();
}
System.out.println("Average intToString = "+ (intToStringElapsed /10));
System.out.println("Average stringValueOf = " +(stringValueOfElapsed / 10));
}
}
답변
Java 소스에서 :
/**
* Returns the string representation of the {@code int} argument.
* <p>
* The representation is exactly the one returned by the
* {@code Integer.toString} method of one argument.
*
* @param i an {@code int}.
* @return a string representation of the {@code int} argument.
* @see java.lang.Integer#toString(int, int)
*/
public static String valueOf(int i) {
return Integer.toString(i);
}
그래서 그들은 정확히 같은 결과를 주며 실제로는 다른 하나를 호출합니다. 나중에 유형을 변경할 수 있으면 String.valueOf가 더 유연합니다.
답변
String
클래스 의 소스 코드를 보면 실제로 호출 Integer.toString()
할 때 호출 valueOf()
합니다.
즉 Integer.toString()
, 메소드 호출이 컴파일 타임에 최적화되지 않으면 아마도 더 빠를 수 있습니다.
답변
이 구현은 String.valueOf()
API에 지정된 계약을 충족하는 가장 간단한 방법입니다. “표현은 정확히 Integer.toString()
하나의 인수 의 메소드에 의해 리턴 된 것 입니다.”