关于类型:
一.
1.编译器直接支持的类型-基元类型->编译器熟悉基元类型的占用空间和初始化方式和各种规则
2. 非基元类型
二.
1. 简单数据类型:包含一个数据项的
2. 复杂数据类型,包含多个数据项,比如list,map等
三.
1. 值类型:存放原始值
2. 引用类型:需要用指针引用
3. java自定义的值类型:自定义的数据结构struct–自定义值类型存放在栈里,由于栈的大小限制所以不能大于16字节,如果大于的话可以用引用类型,引用类型存放在堆里—–其中值类型反应快空间小,引用类型反应慢,空间大。
相对于javascript:
一.
1. 没有自定义值类型(没有struct),只有值类型也是基元数据类型
2. 引用类型分为
* 内置引用类型:一般不是本语言编写(一般是c),屏蔽物理层复杂性,提供api接口。
* 自定义引用类型
关于隐式转换
隐式转换是容易出现代码bug的地方
在吧不同类型数值类型相互赋值的时候,编译器会尽量转换,如果超出相应类型的有效范围,就会出现高位溢出或者地位丢失,如果是隐式转换,高位溢出会抛出错误,低位丢失不会报错,这里会引起错误。
如果是强制显示转换(int a = (int)float;),编译器不会处理,导致高位溢出和低位丢失都不会报错(c语言也是这样)。
而实参和形参的转换也会出现隐式转换错误
javascript小记
javascript是动态类型,综合起来有3中变量类型也就是基元变量,undefined(值是0000),number(数值,双精度浮点数,可存证书和浮点数,无穷大时是+infinity),非数值类型NaN(相当于null)