
在理解自动类型转换之前必须理解这样一个原则“表数范围小的可以向表数范围大的进行自动类型转换”,因此自动类型转换指小可转大,大转小会失去精度,自动类型是两个大小不同的数据,会把小的转变成大的进行运算。
java高级编程语言是一种类型语言,编程过程中的对数据类型的限制是比较严格的。
数据类型自动转换,是弱语言的一种特点,尽管现在AS越来越趋向一门强制类型语言,但作为一个优秀的AS程序员,能灵活运用数据类型自动转换,也是一项基本工,今天先把这个规则贴出来。
原始数据类型→AS10转换结果→AS20转换结果
★其他类型转换为数字类型:
undefined→0→NaN
null→0→NaN
布尔→true为1;false为0→同AS10
数字串→相应的数字值→同AS10
非数字串→NaN→同AS10
"Infinity"→NaN→同AS10
"-Infinity"→NaN→同AS10
"NaN"→NaN→同AS10
数组→NaN→同AS10
对象→NaN→同AS10
影片剪辑→NaN→同AS10
★其他类型转换为串类型:
undefined→空串→”undefined“
null→"null"→同AS10
布尔→true为"true";false为"false"→同AS10
NaN→"NaN"→同AS10
0→"0"→同AS10
Infinity→"Infinity"→同AS10
-Infinity→"-Infinity"→同AS10
一般数字→外观一样的串→同AS10
数组→以一个逗号分隔的元素值列表→同AS10
对象→toString()方法得到的结果值→同AS10
影片剪辑→影片剪辑的绝对路径→同AS10
★其他类型转换为布尔类型:
undefined→false→同AS10
null→false→同AS10
NaN→false→同AS10
0→false→同AS10
Infinity→true→同AS10
-Infinity→true→同AS10
一般数字→true→同AS10
非空串→非0数字串为true;否则为false→都为true
空串→false→同AS10
数组→true→同AS10
对象→true→同AS10
影片剪辑→true→同AS10
→参考《Actionscript权威指南》第80页
★:执行等于 *** 作符(==)时的转换规则:
1:如果两个 *** 作数属于相同的类型,就直接对它们进行比较。(注意:null和undefined被视为相同的类型)
2:如果一个是数字,一个是串,就将数字转换成串。
3:如果有是布尔值,就将此布尔值转换成数字。
4:如果有对象类型,就调用对象的valueOf()方法,将它转换成一个原始类型。再进行比较。
5:如果以上步骤都无法得到一个有效的结果,就返回false。
★:执行不等比较 *** 作符(>,=)时的转换规则:
1:如果两个 *** 作数都是数字,就按照数字的规则进行比较。
2:如果两个都是串,就按照它们在Latin1字符指令表的编码点,从第一个字母依次比较。
3:如果一个为串,一个为数字,就将串转换成数字。
4:如果有布尔值、null、undefined,就将它们转换成数字。
5:如果有对象类型,就调用valueOf()方法将对象转换成原始值,再进行比较。如果转换失败,就返回false。
6:如果以上步骤都无法得到一个有效的结果,就返回false。
→参考《Actionscript权威指南》第138,142页
★原始数据类型的等同性:
●数字类型:
1:如果两个数字都是正无穷或负无穷,或者两个数字都是0(AS中0不分正负),再或者两个数字相等,结果都为true。
trace(Infinity==Infinity) //true
trace(-Infinity==-Infinity) //true
trace(+0==-0) //true
trace(4==4) //true
2:其它情况都为false。
trace(+Infinity==-Infinity) //false
trace(NaN==NaN) //false
trace(1==NaN) //false
trace(1==4) //false
●串类型:除非两个串是大小写完全一样的字符序列,否则就为false。
trace("flash"=="Flash") //false
trace(""==" ") //false
trace("flash"=="flash") //true
●布尔类型:如果两个 *** 作数都为true或false,就为true,否则就为false。
●undefined和null:如果两个 *** 作树都为undefined或null,又或者一个为undefined,一个为null,就得到true,否则就为false。
★复合数据类型的等同性:包含了复合数据类型的变量储存的是数据的引用,而非数据本身。除非两个变量指向同一个引用,否则就算它们具有看似相同的值,也不相等。
●数组:
shuzu1=["4","a"];
shuzu2=["4","a"];
trace(shuzu1==shuzu2); //false
shuzu3=shuzu1; //使shuzu3跟shuzu1具有同样的引用
trace(shuzu1==shuzu3); //true
●对象:
sound1=new Sound();
sound2=new Sound();
trace(sound1==sound2); //false
sound3=sound1;
trace(sound3==sound1); //true
1) 最高位是符号位,0表示正数,1表示负数。
2) 如果是正数,正常表示(即原码),如果是负数,先求反码,再求补码(补码为反码加1)即为他的二进制表示。例如char型的1,用二进制表示为00000001;char型的-1用二进制表示为11111111。
常量,就是在程序运行过程中值无法被改变;变量,就是在程序运行过程中内部存储的值随时可以被改变。变量是“可读、可写”,而常量,是“只读”的。
整形常量:12、浮点型常量:1235、实数型常量:13e-5、字符型常量:'a'、字符串型常量:"abc"、标识符常量:#define LEN 10。
变量一般存放在内存中:栈区, 静态数据区,全局变量区, 堆区。函数中定义的变量,如果不加特殊修饰,都是保存在栈区,函数调用结束,栈空间被自动释放。
定义变量:
<存储类型> <数据类型> <变量名>
static/auto/ int/char a
例如:static int a;char c;
存储类型:
自动类型转换
将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如:float a = 10;10是int类型的数据,需要先转换成float类型然后再赋值给变量a。
在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下:
强制类型转换
自动类型转换是编译器根据代码自己判断的,有时候我们需要手动的进行数据类型转换,称之为强制类型转换,例如:
(int)(a+b); //将a + b 求得结果的数据类型强制转换为int型。
运算符的优先级
特殊运算符>单目运算符>双目运算符>三目运算>赋值运算>逗号运算
在 Java 中,除了数字类型的自动隐式类型转换之外,类之间也可以进行自动类型转换。
如果一个类型的对象实现了另一个类型的接口,或者一个类型的对象是另一个类型的子类,那么就可以将前者自动转换为后者的类型。
例如,假设有两个类 A 和 B,其中 A 是 B 的子类。那么可以将 A 类型的对象自动转换为 B 类型,如下所示:
A a = new A();
B b = a; // 自动类型转换
这种自动类型转换的机制在 Java 中称为多态(Polymorphism)。
以上就是关于java自动类型转换是什么意思全部的内容,包括:java自动类型转换是什么意思、as的数据类型自动转换、Linux C - C基础篇(一)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)