面试问题:在php中,是123 == 0123?

Sad*_*dat 22 php comparison

我回答说这是假的.然后他问为什么?我无法回答.任何人都可以回答吗?我很有兴趣学习它.

Pas*_*TIN 69

这段代码:

var_dump(123);
var_dump(0123);
Run Code Online (Sandbox Code Playgroud)

会得到你:

int 123
int 83
Run Code Online (Sandbox Code Playgroud)

这是因为0123是八进制表示法(因为0在开头),123而是十进制.


有关更多信息,您可以查看本手册的" 整数"部分.


一个更棘手的问题会一直询问79079,例如:

var_dump(79);
var_dump(079);
Run Code Online (Sandbox Code Playgroud)

会得到你:

int 79
int 7
Run Code Online (Sandbox Code Playgroud)

(9不是八进制中的有效数字;-))


fbr*_*eto 24

前缀数字0表示八进制(基数为8),大致相同的方式0x表示十六进制(基数为16).

  • 也许有点挑剔,但我会说"表示"而不是"暗示"."0"和"0x"前缀*ex*隐式表示基数,而不是*im*隐式. (4认同)

Kri*_*rma 5

1)当我们在php中使用==运算符时,它会检查值是否相等.所以5 =="5"=> true 2)当我们在php中使用===运算符时,它会检查值和数据类型是否相等.所以5 ==="5"=>假

123 == 0123 => false ALSO 123 === 0123 => false

123是十进制数:123 0123是八进制数(以0开头):83

123不等于83