今天看了下关于转换的内容,终于有一个初步的理解,如果有错误,请帮忙指出来,在此谢过了。
首先引用类型存储的地方分为两部分,一部分是变量,存储在栈中,另外一部分是实例,存储在堆中,而存放在栈中的变量还存有一个指向堆中实例的地址。而我们的隐式或者显示转换的意思是操作存储在栈中的那个变量的类型,强制转换则是操作堆中实例的类型。
就像是有一个苹果放在那,现在说说隐式转换,就是把这个苹果看成是水果,从子类到父类;而显示转换就是将苹果看成是富士苹果,从父类到子类。而不管我们将那个苹果看成水果或者是富士苹果,那个苹果的实例就摆在那,始终是没有改变的。把苹果看成水果或者是富士苹果,就像我们在操作引用类型的变量部分。引用类型的变量部分的的类型决定了该变量能够调用的方法或者拥有的属性。再说说强制转换,就是将那个苹果榨成汁了,现在摆在那个的不再是一个苹果。这个就是我们在操作引用类型在堆中的实例部分,确确实实的在堆中的改变了实例的内存。 |