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

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

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

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

4501閲覧

Dim str As String = "" と Dim str As String = String.Emptyはどう違う?

King_of_Flies

総合スコア382

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2グッド

1クリップ

投稿2017/07/20 01:53

タイトルで質問内容を書いてますが、
Dim Str As String = "" と Dim str As String = String.Emptyはどう違いますか?

""は空文字が入り、String.EmptyはNullが入るという認識ですが、
やっていることは初期化なはずです。

実際に触ったプログラムにも上記の初期化が混在していたりします。
意図が合って使い分けているのか、作成者の自由なのかが気になります。

皆様はどっちの方法で初期化していますか?
自分はString.Emptyが妥当なのではと思うのですが、実際のところ教えてください。

AtsushiYonenaga, N-u-u👍を押しています

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

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

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

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

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

guest

回答3

0

いえ、String.Emptyも中身は空文字列です(MSDN)。

.NET 1.x時代には、""がその都度オブジェクトを生成していたので、String.Emptyのほうが効率が良かったのですが、今となっては差はないので、気分やコーディング規約次第で選べばいいとのことです(StackOverflow)。

投稿2017/07/20 02:06

maisumakun

総合スコア145183

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

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

0

string.empty "" などをキーワードにググると参考になりそうな記事がいろいろヒットしますが、ここで質問する前にやってみましたか。例えば下記:

パフォーマンスを気にするなら、String.Empty より "" と書いた方が良い。
http://blogs.wankuma.com/shuujin/archive/2008/04/21/134497.aspx

上記のような細かいことを言わない限り String.Empty と "" は同じです。

投稿2017/07/20 02:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

ちょっと興味がわいたので下記の処理を作ってみました。

↓↓ここが嘘でしたごめんなさい

結果、全ての処理においてメッセージボックスが表示されましたね。
というわけで、ほぼ等価と言って良いかと思います。

↑↑ここが嘘でしたごめんなさい

nothingを除いて、""とString.emptyはほぼ等価と言って良いでしょう。
ただ、書き方としてはプロジェクト内で統一したいですね。

Dim test1 As String = "" Dim test2 As String = String.Empty Dim test3 As String = Nothing If test1 = "" Then MsgBox("test1は空白") End If If test2 = "" Then MsgBox("test2は空白") End If If test3 = "" Then MsgBox("test3は空白") End If If test1 = String.Empty Then MsgBox("test1はempty") End If If test2 = String.Empty Then MsgBox("test2はempty") End If If test3 = String.Empty Then MsgBox("test3はempty") End If If test1 = Nothing Then MsgBox("test1はnothing") End If If test2 = Nothing Then MsgBox("test2はnothing") End If If test3 = Nothing Then MsgBox("test3はnothing") End If 'この時には、test3のみが判定の対象になる!! If IsNothing(test1) Then MsgBox("test1はnothing") End If If IsNothing(test2) Then MsgBox("test2はnothing") End If If IsNothing(test3) Then MsgBox("test3はnothing") End If

投稿2017/07/20 02:06

編集2017/07/20 02:17
motuo

総合スコア3027

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

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

King_of_Flies

2017/07/20 02:09

nothingを含め検証してくださったのでBAです
motuo

2017/07/20 02:14

スイマセン。一部、微妙な回答がありました。 isNothingで判定すると、test3のみがNothingとみなされました。 なので、「ほぼ等価」というのは嘘ですね。 回答も編集しておきます。
King_of_Flies

2017/07/20 02:16

Nothingは空文字判定でも有り、nothing判定でもあるのか・・~
motuo

2017/07/20 02:24

VB.NETの=演算子はNothingと空の文字列を等価と判断しているそうです。 私自身も勉強になりました(^ ^;)
退会済みユーザー

退会済みユーザー

2017/07/20 02:36

> 結果、全ての処理においてメッセージボックスが表示されましたね。 Option Strict Off にしておくとそうなると思いますが、Nothing と String.Empty (または "") 本質的に違うものですよ。 Option Strict On にして試してみてください。違う結果になるはずです。 変数には値型と参照型があって String は参照型ということは理解されているでしょうか? そして、参照型について基本的な理解はされているでしょうか? もし、そのあたりの理解があいまいということでしたら以下の記事などを読んでみることをお勧めします。 値型と参照型の区別と違い http://dobon.net/vb/dotnet/beginner/valuereference.html 参照型に関する理解があれば Nothing (C# は null)と空文字は違うものだと理解できると思います。
退会済みユーザー

退会済みユーザー

2017/07/20 02:58 編集

すみません、上の Option Strict On / Off の件勘違いしてました。空文字 = Nothing が true になるのは VB.NET の等価演算子の実装によるものだったようです。 (11:58 訂正: 型文字 ⇒ 空文字)
motuo

2017/07/20 02:50 編集

>Nothing (C# は null)と空文字は違うもの 確かに、少し考えてみればその通りですよね。PHP等の他の言語でもそうですし。 >Option Strict On にして試してみてください。違う結果になるはずです。 すいません。これを試してみたのですが、結果は同じですね。(やり方がおかしかったのでしょうか…) 私としてはマズかったのは、Nothingを=(イコール)で判定した箇所かと思っています。 →ごめんなさい。先ほどのコメントの後で、上記のコメントを書いていました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問