관리 메뉴

Enjoy what you do!

c# value type, reference type 에 따른 Equals(), referenceEquals() 본문

프로그래밍 언어/C#

c# value type, reference type 에 따른 Equals(), referenceEquals()

쵸코맛 비비빅 2017. 12. 14. 18:06

value type : int, long, double, float 등등 각종 변수 타입 (단 string 은 reference 타입), struct

-> 스택에 저장된다.


reference type : 객체(new 로 선언한건 뭐든 적용된다.), string.

-> 에 저장된다.





 

 Equals()

 referenceEquals()

 int, double 등의 변수

값을 비교 

 주소 비교(무조건 거짓)

 객체

 주소 비교

주소 비교 (이퀄스와 같음)

 string

값을 비교 (특이)

 주소 비교

 struct

값을 비교 

 주소 비교(무조건 거짓)



즉, int, double 등의 변수들과 struct 를 비교하는 경우 주소가 같을수 없기에(참조를 할수 없으니 각각 스택에 따로 존재하므로)

 뭘해도 referenceEquals()는 거짓이 나온다.


객체를 비교하는경우 equals도 같은 인스턴지인지 주소를 비교하므로 Equals 와 referenceEquals 는 차이가 없다.

(각 변수가 같은 객체를 참조해야 true가 나오고 같은 클래스로 같은 값을 줘서 인스턴스화해도 두 인스턴스는 false가 나온다.)


string 의 경우는 특이하게 reference type인데도 equals는 주소를 비교하지않고 값을 비교한다.

즉, string이 서로 다른 주소값을 같더라도 값이 같다면 (문장이 같다면) equals는 true가 나온다.




출처 : 내가 씀

'프로그래밍 언어 > C#' 카테고리의 다른 글

씨샵C# equals referenceequals 차이  (0) 2017.11.12
씨샵 자바 차이  (0) 2017.11.06
씨샵 이벤트 발생과 처리  (0) 2017.10.02
씨샵 엔터키 누를시 이벤트  (0) 2017.10.02
씨샵 timer 3가지와 그 차이점  (0) 2017.10.02
Comments