Przejdź do głównej zawartości

Wszystkie porównania zwrócą wartość true.

Nie są to jednak wartości, których intuicyjnie moglibyśmy się spodziewać po użyciu operatora <.

Porównanie mniej niż oraz analogicznie przeciwstawne więcej niż działa intuicyjnie poprawnie dla wartości liczbowych.

Dla porównania ciągów znaków intuicja mija się jednak z algorytmem, który odpowiada za faktyczne porównania.

Jeśli operandami są ciągi znaków, porównywane są wartości liczbowe przypisane do znaków w kodowaniu Unicode.

Znak "a" w kodowaniu Unicode to liczba 97.

Znak "b", odpowiada liczbie 98.

97 < 98 jest więc twierdzeniem prawdziwym.

Gdy ciągi znaków składają się z większej ilości znaków są one porównywane ze sobą kolejno, znak po znaku.

"b" < "b" zwróciłoby fałsz, bo fałszywe jest stwierdzenie 98 < 98.

"b" < "bz" zwraca prawdę, bo kolejny znak, "z" jest większy niż brak znaku po lewej stronie porównania.

"bxz" < "bz" zwraca prawdę bo "x" w kodowaniu Unicode ma niższą wartość (kod 120) niż "z" (kod 122), innymi słowy występuje wcześniej w alfabecie. Trzecie z zostaje pominięte.

Gdy zamiast liter użyjemy liczb, ale będą one zapisane w postaci ciągu znaków, to sytuacja będzie wyglądała tak samo.

"34" < "5" jest prawdziwe, bo "3" (kod 51) jest mniejsze niż "5" (kod 53). "4" zostaje znakiem pominiętym w porównaniu.

Nie ma znaczenia ile kolejnych znaków dodamy oraz jakie to będą znaki, "3499999999" < "5".

Zwróci tak samo prawdę, ponieważ Unicode "3" (51) jest mniejszy niż Unicode "5" (53).