문제

그래서 나는 "Java for Dummies" 4판을 구입했는데, 이 책은 아마도 내가 책 구입에 쓴 30달러 중 최고라고 말하고 싶습니다.나는 코딩을 처음 접한 사람이 아니며, 실제로 그렇게 말하면 꽤 괜찮습니다.

그러나 나는 약간 혼란스러운 코드 줄을 발견했습니다.

public void setName(String n)
{
     if(!n.equals(""))
     {
          name = n;
     }
}

내 질문은 세 번째 줄인 if(!n.equals("")) 부분에 나옵니다... 루프가 어떻게 작동하는지 알고 있습니다(예:if(this == that){do stuff}), 하지만 이전에는 !n.equals("") 설정을 본 적이 없습니다.누구든지 나에게 설명해 주시겠습니까?

추신:그냥 추측해보자.다음과 동일합니까?

public void setName(String n)
{
     if(n != "")
     {
          name = n
     }
}

내 생각엔 이는 사용자가 이름을 입력하지 않았는지 확인하는 방법일 뿐이라고 생각합니다(예:myAccount.setName = "";) 오류가 발생하지 않고 정상적으로 실행되지만 확실하지 않습니다.

도움을 주셔서 미리 감사드립니다!

편집하다:내 "myaccount.name =" ";" "myaccount.setname =" ";", 혼란에 대해 죄송합니다.

감사합니다:아삽으로 가는데 답변 감사합니다!Lucas Aardvark와 마찬가지로 그도 답변했지만 Asaph는 먼저 자신의 답변으로 내 확인 의견에 답변했습니다. 모두에게 감사드립니다!

도움이 되었습니까?

해결책

if(!n.equals(""))
{
     name = n;
}

n이 빈 문자열이 아닌 경우 해당 값을 name에 할당한다는 의미입니다.

Java에서 모든 객체에는 다른 객체와의 동등성을 테스트하기 위한 equals(Object o) 메서드가 있습니다.== 연산자는 일반적으로 프리미티브를 비교하는 데 사용됩니다.또한 객체의 "동일성"을 비교하는 데에도 사용할 수 있습니다.즉.두 개체는 실제로 동일한 인스턴스입니다.이는 문자열과 같은 불변 유형과 Integer 및 Long과 같은 기본 유형에 대한 모든 객체 래퍼에 유용합니다.

다른 팁

Java에서는 줄이 불변이지만 인턴되지 않았으므로 ( ""== n) ". equals (n)이 참인 다른 문자열에 대해 (" "== n)이 사실이거나 그렇지 않을 수도 있습니다.

당신을 더 혼란스럽게하기 위해, 이것은 나쁜 코드이며, null을 인수로 호출하면 nullpointerexception을 얻게됩니다. "".equals (n)로 작성해야합니다.

equals () 메소드는 두 문자열의 내용을 비교합니다. == 및! = 연산자는 두 문자열 객체가 동일한 객체인지 아닌지 알려줍니다. 같은 내용이 동일한 두 개의 다른 문자열이므로 서로와 동등합니다. 문자열은 변하지 않더라도 문자열이 변이 가능하다는 것을 상상하여 차이를 이해하는 데 도움이됩니다. 그런 다음 ()은 "현재 동일하다"는 의미이며 == "항상 동일하다"는 의미입니다.

안전한 규칙은 두 줄이 두 줄이 확실하지 않은 한 항상 equals ()를 사용하는 것입니다 인턴. 인용 :

S.equals (t)가 참이면, S.intern () == t.intern ()이 사실이라면 S.intern () == t.intern ()이 사실이라는 점을 따릅니다.

모든 문자 그대로의 문자열과 문자열 값 상수 표현이 인턴됩니다.

이걸 고려하세요:

String a="";
String b="";

A와 B는 모두 문자열 객체이며 각각 고유 한 메모리 할당과 고유 주소가 있습니다. A와 B는 다른 주소에 있습니다. 부울 표현을 코딩 할 때

a == b

당신은 그들의 내용이 아니라 객체의 주소를 비교하고 있습니다. 내용을 비교하려면 문자열 객체의 equals () 메소드를 사용해야합니다.

객체는 메모리에 물리적 위치를 가지며 각 객체마다 고유 한 두 가지 객체가 동일한 메모리 주소를 가질 수 없으며 내용 또는 값을 가질 수 없습니다. == 연산자는 객체의 주소를 비교합니다. 코드 A == B를 코딩 할 때 A와 B가 동일한 개체에 대한 별명 이름인지 묻습니다. A와 B는 동일한 물리적 위치를 참조하십시오. A.equals (b)는 두 개체가 어디에 있든 동일한 값을 갖는지 묻습니다.

이것은 컴파일러가 컴파일 시간에 두 상수가 동일한 값을 갖고 동일한 객체를 재사용 할 수있는 컴파일 시간을 감지 할 수있는 컴파일러 "인턴"에 의해 다소 복잡합니다. 그러나 런타임에 생성 된 값에는 적용되지 않습니다.

방법 equals() 반환합니다 boolean 통과되는 객체가 '동일'과 동일하다는 것을 말하는 값. 이 '동등한'방법은 클래스에서 자신의 테스트를 수행하기 위해 상환 될 수 있습니다. 의 경우 String, 테스트는 원래 문자열의 값이 전달되는 객체의 문자열 표현 값과 동일한지 여부입니다.

부울을 반환 할 때 값을 !, 테스트는 '메소드 인수가 빈 문자열이 아닌가?'입니다. 예? 그런 다음 우리에게 할당하십시오 name 변하기 쉬운.

== 항상 왼쪽의 객체 여부를 테스트합니다 ~이다 참조를 비교하므로 오른쪽의 객체와 동일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top