programing

(String) or .toString()?

newsource 2022. 11. 7. 22:36

(String) or .toString()?

나는 다음 방법을 가지고 있다.Object o파라미터를 지정합니다.

이 방법에서는, 나는 정확히 알고 있다.String"o"로 표시되며 이는 null이 아닙니다.확인하거나 다른 작업을 수행할 필요가 없습니다.나는 그것을 정확하게 다루어야 한다.String물건.

그냥 궁금해서 - 뭐가 더 싼지 - 던지세요String또는 를 사용합니다.Object.toString()아니면 시간/cpu-/mem-가격으로 같습니까?

업데이트: 메서드가 수락합니다.Object인터페이스의 구현이기 때문입니다.파라미터 타입은 변경할 수 없습니다.

그리고 그럴 리가 없다null조금도.나는 단지 그것이 무효인지 비어 있는지 확인할 필요가 없다는 것을 말하고 싶었다.저 같은 경우에는 항상 비어 있지 않은 문자열이 있습니다.

casting to a String is cheaper since that doesn't require an external function call, just internal type checking.

I would use a cast. That validates your "knowledge" that it's a string. If for whatever reason you end up with a bug and someone passes in something other than a string, I think it would be better to throw an exception (which a cast will do) than continue to execute with flawed data.

According to Silly performance musings: x.toString() vs (String)x

In thend end, results are surprisingly clear: it is at least twice as fast to cast Object to String than to call Object.toString()

If you know the Object o is a String, I'd say just cast it to a String and enforce it that way. Calling toString() on an object that you know for sure is a String might just add confusion.

If Object o might be anything other than a String, you'll need to call toString().

I wouldn't be too concerned by the performance, if this operation is done even just a few thousand times a second - there's no tangible difference.

다만, 그 입력을 「알고 있는」 것에 대해서는 염려하고 있습니다.다음 메시지를 수신할 수 있는 방법이 있습니다.Object그리고 당신은 그것을 그렇게 취급해야 한다. 즉, 당신은 파라미터에 대해 아무것도 알아서는 안 된다, 그것이 그것을 고수하는 것 이외에는.Object인터페이스(예: 인터페이스)가 있습니다.toString()방법.이 경우, 그냥 추측하는 것이 아니라, 그 방법을 사용하는 것을 강력히 추천합니다.

OTOH, 입력이 항상 다음 중 하나일 경우String아니면null받아들이도록 메서드를 변경하기만 하면 됩니다.String 그리고 합니다.null 이외의것을 해 주세요)s(원본 이외의 것을 취급할 때는 반드시 실행해 주세요).

참조 타입이 오브젝트이고 모든 오브젝트에 toString()이 있는 경우 object.toString()을 호출하기만 하면 됩니다.String.toString()은 이 값을 반환합니다.

  • toString()은 입력하는 코드가 적습니다.
  • toString()은 바이트 코드보다 작습니다.
  • 캐스팅은 비용이 많이 드는 작업이고 다형 콜입니다.
  • 출연진이 실패할 수도 있어요.
  • 늘이 아닌 경우 object.toString()만 호출하는 String.valueOf( object )를 사용합니다.

"o"에 문자열이 있는 경우 큰 차이는 없습니다(캐스팅이 더 빠를 수 있지만 이는 VM/라이브러리 구현에 해당합니다).

"o"가 문자열이 아니라 문자열이어야 하는 경우 원하는 캐스트입니다(단, 메서드에 개체 대신 문자열을 사용해야 합니다).

"o"가 임의의 유형일 경우 toString을 사용해야 하지만 먼저 null을 확인해야 합니다.

void foo(final Object o)
{
    final String str;

    // without this you would get a class cast exception
    // be wary of using instanceof though - it is usually the wrong thing to do
    if(o instanceof String)
    {
        str = (String)o;
    }    
}

아니면

void foo(final Object o)
{
    final String str;

    // if you are 100% sure that o is not null then you can get rid of the else
    if(o != null)
    {
        str = o.toString();
    }
}

마지막 코드는 다음과 같습니다.

void foo(final Object o)
{
    final String str;

    if(o == null)
    {
        throw new IllegalArgumentException("o cannot be null");
    }

    str = o.toString();
}

이상하게도 토스트링 호출에 의해 암시된 vtable lookup보다 출연자가 느리다는 것을 알게 되었습니다.

'null string in o'는 사용할 수 없습니다.o가 null일 경우 null 문자열이 포함되지 않고 null일 뿐입니다.우선 O를 체크해 주세요.ToString()을 늘로 캐스트 또는 호출하면 크래시가 발생합니다.

언급URL : https://stackoverflow.com/questions/676363/string-or-tostring