谈一谈对与强类型与弱类型的简单理解

放牛娃1988 发布于 2012/02/02 23:41
阅读 4K+
收藏 0

这个问题,但凡有一点语言常识的人恐怕都知道,但是不排除有一些初学者混淆不清。所以我想分享一下我对这个问题的认识:

1)不管是强类型还是弱类型,变量都有两个属性:类型和值;也就是说,弱类型的变量同样有类型。
不管是哪一种编程语言,其中使用的变量,都既有类型,又有值。强类型的变量类型,必须在源代码中明确定义,称之为“变量声明”,弱类型的变量类型则是无需声明的,由解释器解释。但是,这并不意味着,弱类型的变量就没有类型这一概念了,举例来说,PHP的gettype就是返回该变量“当前”的类型。

2)强类型的变量类型是不能改变的,弱类型变量是随需改变的,这是强弱的真正含义
强类型的变量一经声明,就只能存储这种类型的值,其他的值则必须通过转换之后才能付给该变量,有编译器自动理解的转换,也有由程序员明确指定的强制转换。但是,弱类型的变量类型则是随着需要不断转换,比如:

$a = 25;
echo gettype($a);
$b = $a.'good';
echo gettype($a);

就会分别输出整数和字符串(貌似是integer,string,请自己测试)

3)误区警示:强制转换并没有改变变量类型
强类型语言有个“强制转换”,这改变的是变量的值的类型,以便进行赋值,而没有改变变量的类型。变量的类型是不允许改变的。

4)一点猜测:关于PHP中相等和全等的实现原理
除了String以外,PHP中的基础类型,他们的相等原理是不管类型,直接比较变量存储的二进制的值;全等的原理,则是先比较解释器当前对变量解释的类型,然后比较其值。这个我没仔细验证过,但是我用这个来衡量大部分变量的时候,发现==返回true的结果一致。如果对==在什么情况下会将不同类型的两个值视作相等的话,可以试一试。

强类型语言以Java为例,弱类型语言以PHP为例,其他语言可能有特定情况,仅供参考,欢迎指教。

加载中
0
阳光test
阳光test

你可以查看一下PHP的源码的/Zend/zend.h中,有这样一段代码:

    每一个变量在PHP解释器实现的时候通过一个zend_uchar的数据类型存储了它的类型,如果改变了它的类型,这个type就相应的改变了,在==和===中,==的效率很低,你可以想象一下嘛,===的时候,只要判定它的type是否相等,再判定值是否相等就OK了,而==的时候,即使type不同,那么它还需要继续判定,所以效率比较低。

      建议你以后能使用===就使用这个,==少用。

返回顶部
顶部