一段VB代码中的疑问

来源:百度知道 编辑:UC知道 时间:2024/05/15 15:30:52
代码如下:
1、 Private Sub Form_Click()
2、 Dim a As String, b As Integer
3、 b = 5
4、 a = InStr("设计个简单的程序", "简单")
5、 Print a + b
6、 End Sub
运行结果为9,可是我就不明白了,在第二句中声明A变量为字符串型,在第四句中A如果为一字符串型变量,那么第五句运行结果就应该为:45;如果第四句的A变量为一数值型变量,那么它就与第二句代码中的声明类型不匹配。为什么还能正常运行呢?请前辈解释一下。
将第二行代码变成:Dim a As Boolean, b As Integer
运行结果变成了4;将第二行代码变成:Dim a As byte, b As Integer,运行结果变成了9,请前辈们解释一下这到底是为什么?

因为有INTEGER类型,而INSTR返回结果类型为 Variant (Long),虽然定义为STRING类型,不过可以合法转换为INTGER,所以就是
结果为9了。
---------------
当转换其他的数值类型为 Boolean 值时,0 会转成 False,而其他的值则变成 True。当转换 Boolean 值为其他的数据类型时,False 成为 0,而 True 成为 -1。

所以结果变成了 5 + (-1) = 4
---------------
Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。
所以结果变成了9
---------------
如果你想45,那么MsgBox CStr(a) + CStr(b),或者两个声明都为STRING

a定义为String,inStr()返回值为Integer,当执行a=inStr(...)是a被隐性的执行了类型转换

再者,b为Integer,当执行a+b时,因为a中字符为数字,也会执行隐性类型转换

同学你能提出这个问题说明你学得不错,希望不要放弃。VB6.0实际上可以可以配置为弱类型,但VB.NET就是个类型非常强的语言了。如果你以后的开发语言不是VB(很可能),那么你完全可以不用在乎现在遇到的问题,因为以后你遇到新的开发语言如JAVA、C#、RUBY的时候,你会发现那些语言比VB美妙许多,你用他们来写代码是一个比VB要愉快得多的过程