こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[JAVA]evalで文字列を計算式に!

こんにちわぁ♪

Javascriptに「eval」というコマンドがあると思います。
これは、文字列を計算式として変換するものです。

例えば String SHIKI = "A + B" という文字列があり、evalを使ってやると
その時点で文字列ではなくなり、
普通に、
A=3;
B=4;
String C = eval(SHIKI);
と計算式にすることができます(使い方がちがうかもしれませんが)。

しかし、JAVAスクリプトではあるこのコマンドが
JAVAでは見つかりません。

これと同等のコマンド、JAVAにありますか?

投稿日時 - 2002-06-26 16:08:45

QNo.300594

暇なときに回答ください

質問者が選んだベストアンサー

こんちは、sohです
ん~む。core APIにはおそらく無かったと記憶しています(ちょっと自信無し)

JAVAScriptやPerlは文字列操作を重要視しているようですが
JAVAは文字列をそこまで重要視していないんですよ。

逆にJAVAScriptをLiveConnectで流用して(認証済みAppletじゃないと使えないけど)
netscape.javascript.JSObjectで呼び出すって
技もありますが、いまどきこんなん使える人いるのかしら?

投稿日時 - 2002-06-26 17:11:43

ANo.1

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

UKY

JavaScript はインタープリタ型の言語なので、プログラムの実行時にソースコードそのものがインタープリタによって解釈されて実行されます。したがってJavaScriptの実行環境には計算式などを機械語に翻訳する機能が必要なわけで、プログラムの中からその機能を呼び出すことが出来ればあなたのおっしゃるようなことが実現できるのです。(実際に、evalを使ってその機能を呼び出しています)

しかしJavaはコンパイル型の言語なので、実行時にはバイトコードが解釈されて実行されるわけですから、実行時に計算式などを機械語に変換する必要がありません。したがって、Javaの実行環境にもそのような機能は入っていません。JavaにはJavaScriptのevalのような機能はないということになります。


というよりも、Javaがコンパイル型の言語であるという時点でこのようなことが不可能であるというのは明確です。

例えば、ご質問にあるようなコードですが、

int value1 = 1;
int value2 = 2;
int answer = eval("value1 + value2");

このようなコードがもしあったとしても、コンパイルした時点で変数の名前がvalue1とvalue2であるとかいうような情報は消えてしまう(つまり、変数の名前がどうであるというような情報はバイトコード上には書き込まれない)のですから、実行時に「こんな名前の変数に入っているデータを足せ」というような動作は無理な話です。

投稿日時 - 2002-06-26 17:35:21

あなたにオススメの質問