質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Q&A

2回答

8506閲覧

VB 2008 .Equals() と 比較演算子の違い

piarokaren

総合スコア16

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

0グッド

0クリップ

投稿2016/11/09 04:57

編集2016/11/09 07:03

SQL Server 2008のSSIS開発を行っています。

【お答えいただきたいこと】
・Equals()と比較演算子の違い
・常に比較演算子ではなく、Equals()を使用するべきなのか

【現象】
スクリプトタスク内にて、データベース(SQL Server)から取得したデータを、

Obj = ResultSet("列名").Value ```として受け取ったとき、DB上で該当データがNULLだった場合、 ```ここに言語を入力 If Obj = "aaa" Then

で比較を行った場合は、DBNullとStringの比較によるエラーになりますが、

If Obj.Equals("aaa") Then

ではエラーにならないのは、Equalsと比較演算子にどのような違いがあるからなのでしょうか。
値の比較においては、違いがなく、
参照型の比較において違いがでるのは認識しております。

Equals()で比較対象がNullであってもエラーとならないのであれば、
常にEquals()を使用すべきなのでは・・・とも思ったりしますが、間違いでしょうか。

調べたところ、比較演算子は内部的にはEquals()を呼んでいるとの記事もあり、
いよいよわからなくなってきたため、質問させていただきました。

Option StrictはOffになっています。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/09 05:47

Option Strict の設定、Obj の型、Null とは何(Nothing の間違い?)を書いてください。
piarokaren

2016/11/09 06:09

ご指摘ありがとうございます。更新させていただきました。
guest

回答2

0

基本的に、「値の等価」を = 演算子で調べ、「参照の等価」を Equals メソッド(VB.NET では Is 演算子を使うほうが良いそうですが)で調べます。詳しくは以下の記事を読んでください。

2つの値が等しいか調べる、等値演算子(==)とEqualsメソッドの違い
http://dobon.net/vb/dotnet/beginner/equality.html

VB.NET の = 演算子については以下の記事にある定義が適用されます。

今回の質問者さんの例 Obj = "aaa" はその記事の「関係比較演算子を使った型宣言を省略したプログラミング」のセクションの "一方または両方が文字列 (String) 以外の参照型の場合" に該当したので "InvalidCastException がスロー" という結果になったのだと思います。

Comparison Operators (Visual Basic)
https://msd .microsoft.com/ja-jp/library/cey92b0t.aspx

一方、Obj.Equals("aaa") は「参照の等価」(Obj が指すオブジェクトと "aaa" が指すオブジェクトは同じものか否か)を調べるもので、片方が Nothing でない限り有効ですので、エラーにはならかなったということでしょう。

投稿2016/11/09 07:49

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

If文で何を仕分けたいのでしょうか?

データベースから取得したデータが、Nullの場合とNullでない場合を分けたいのであれば、= が適していて、nullの場合に起きるエラー(例外)を捕捉するようなコードにすると良いです。

Nullかどうか、どうでも良いのであればEquals()を使う事でNullの場合のエラーを避けられます。

piarokarenさんが何がしたいのかによって、どちらが適しているのかが決まります。

どんな場合にも最適であるコードというのは、無い場合が多いですよ。(複雑で高機能なコードよりも、単純で欲しい機能だけを提供してくれるコードのほうが使いやすいとか)

投稿2016/11/09 07:43

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問