関係演算子に関して
制御構文などで使う関係演算子に関してですが、
Objective-Cには、下記の演算子があります。
演算子 |
== |
!= |
> |
>= |
< |
<= |
値の比較をする時に利用するのでが、
比較した結果は、「0」か「0」以外になります。
「真」の場合は、「0」以外で、「偽」の場合は、「0」になります。
int arg1 = 100; int arg2 = 200; int arg3 = arg1 == arg2; int arg4 = 100; int arg5 = arg1 == arg4; NSLog(@"%d", arg3); // 0 NSLog(@"%d", arg5); // 1(0以外)
条件を評価した結果が0と0以外で判断されるので、
下のような書き方もできちゃいます...あんまりやらない方がいいと思いますが。
int arg6 = -1; if (arg6) { NSLog(@"真"); } else { NSLog(@"偽"); } int arg7 = 0; if (arg7) { NSLog(@"真"); } else { NSLog(@"偽"); }
それと文字列比較ですが、関係演算子では、できません。
文字列は、そもそもオブジェクトなので、関係演算子では、オブジェクトの中身の比較をすることはできません。
実は、オブジェクトをインスタンス化する時に変数を定義しますが、
その変数は、オブジェクトそのものが格納されているわけではありません。
オブジェクトが格納されている領域への参照(アドレス)が入っていますので、
比較しても無意味です。
文字列の比較には、isEqualToStringを使います。
NSString *arg8 = [NSString stringWithFormat:@"テストです。"]; NSLog(@"%@", arg8); NSString *arg9 = [NSString stringWithFormat:@"テストです。"]; NSLog(@"%@", arg9); // 偽になります。 if (arg8 == arg9) { NSLog(@"真"); } else { NSLog(@"偽"); } // 真になります。 if ([arg8 isEqualToString:arg9]) { NSLog(@"真"); } else { NSLog(@"偽"); }