참조
그들이 유형 double
인 경우에만 경우 원시 유형의 기본 요소를 고려, float
이 , int
, long
등입니다.
참조 유형은 데이터를 저장하기 위해 "개체"를 사용하는 모든 유형입니다. 수업 시간에 제작할 때 실제로는 "변장"방식으로 참조 유형을 만듭니다. 참조 유형의 예로는 String
, Double
, Integer
등이 있습니다.
따라서 형식이 달라질 때까지 float x
을 Float y
과 비교하면 실제로 두 가지 유형을 비교하고 있습니다.
자바에서는 ==
의 연산자가 대부분 동등한 유형의 객체 만 비교합니다.그러나 때로는 언어 (상기 정의 된) x
원시적이며 y
가 참조 형식 인 경우에, 예컨대 x == y
를 다른 형태의 비교를 허용한다.
x
과 y
의 비교를 수행하면 boxing and unboxing이라고하는 작업이 수행됩니다. 그러나 권투를 이해하기 위해서는 메모리 의미론에 따라 기본 유형과 참조 유형의 차이점을 이해해야합니다. (당신을 놀라게하는시키지 말라!)
원시적 인 형태의 신속하고 세분화 접근의 관점에서 보면 매우 유연하지 스택이라는 메모리 위치에 저장됩니다. 꽤 쉽습니다.
참조 형식 비록 다른 : 참조 형은 는 new
연산자 사용을 인스턴스화 될 때 - Float
또는 다른 참조 타입 인 경우 (Float x = <something>;
을 할 때 내재적이라고 Float x = <something>;
Float x = new Float(<something>);
로 설정되어, 즉) 정도 객체가 생성되어 힙에 저장되지만 해당 객체 (힙에 있음)에 대한 포인터는 스택에 저장됩니다.
즉, x
에 저장된 값을 검색하려면 컴퓨터가 스택에 저장된 주소를 사용하고 힙의 해당 메모리 주소로 이동해야합니다. 스택 메모리 할당과 주변의 다른 개체에 대한 걱정없이 해제되는 곳이다 "동적 메모리 할당,"라고 뭔가 아주 좋은하지 않기 때문에
우리는 참조 유형을 저장하는 힙을 사용합니다. 복싱 언 박싱 지금
: 두 개체가이다되도록
권투 (또한 포장)는 원시 타입 오브젝트를 취하고 참조 형식으로 저장하는 과정이다 (따라서 float x
는 Float x
된다) 동일 유형. (그것은 종이에 크리스마스 선물을 포장하는 것과 같은 종류입니다.) 그래서 뒷 배경에, Integer k = 6
은 일종의 복싱입니다. (autoboxing)
언 박싱은 언 박싱과는 반대되는 것으로 언 랩핑이라고 할 수 있습니다. 언 박싱는 "박스"오브젝트를 다시 원시적 형에 대한 참조 유형에서 소요, 그래서 문은 너무 많은 번거 로움 :이 정말 의미
Integer k = 6; //Boxing
int m = k; //Unboxing
없이 작업 할 수 있습니다 귀하의 질문 측면에서 : 귀하가 게시 한 코드에서 autoboxing 및 unboxing이 발생하여 명세서가 유효하게되었습니다. JVM은 당신이 의미하는 바를 수행 할만큼 영리했습니다. 그렇다고해서 복싱과 언 박싱이 코드 성능에 심각한 영향을 미칠 수 있기 때문에 정기적 인 습관을 만들어야한다는 것을 의미하지는 않습니다!
또한 x
과 y
이 모두 Float
유형 인 경우 참조를 비교해야합니다.
행운을 빌어 요!
다소 관련 : http://stackoverflow.com/questions/1551235/java-strings-compareto-vs-equals?rq=1 –
f1.equals이 (F2) 무엇을 주셨 는가? [워드 프로세서] (http://docs.oracle.com/javase/6/docs/api/java/lang/Float.html#compareTo (자바에서 – smk
.lang.Float)) : "이 메소드 ['compareTo']에 의해 부과 된 Float 객체의 자연 순서는'equals'와 일치합니다." –