views:

705

answers:

5

I have answered it is false. then he asked why? i couldn't answer. Can anyone make the answer? I am very interested to learn it.

+47  A: 

This code :

var_dump(123);
var_dump(0123);

will get you :

int 123
int 83

this is because 0123 is octal notation (because of the 0 at the begining), while 123 is decimal.


For more informations, you can take a look at the Integer section of the manual.


An even trickier question would have been to ask about 79 and 079, for instance :

var_dump(79);
var_dump(079);

will get you :

int 79
int 7

(9 is not a valid digit in octal ;-) )

Pascal MARTIN
+1....that must be true for Java too
Xinus
+2  A: 

Because 0123 means "123 in octal (base 8)", which is 83 in decimal.

PiotrLegnica
+8  A: 

Prefixing a number with 0 indicates octal (base 8), much the same way 0x indicates hex (base 16).

fbrereto
Perhaps a bit of a nitpick, but I'd say "indicates" rather than "implies". The `0` and `0x` prefixes *ex*plicitly indicate base, not *im*plicitly.
Ben Blank
fixed, thanks.
fbrereto
+2  A: 

0123 is notation for an octal number (83 decimal, off the top of my head), whilst 123 is a decimal number. Therefore, they are not equal.

Rowland Shaw
+3  A: 

1) When we use == operator in php, it checks if values are equal. So 5=="5" => true 2) When we use === operator in php, it checks if values and data types are equal. So 5==="5" => false

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

123 is decimal number : 123 0123 is an octal number (as it starts with 0) : 83

123 is not equal to 83

Krishna Kant Sharma