わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

JShellの評価結果はそのまま使えない?

 JShellはJavaのREPL (Read-Eval-Print Loop)です.
 式や文を与えると,そのつど評価してくれますし,間違っていればエラーを出力します.変数を宣言して,JShellのプロセスが終了するまで参照することもできます.
 Webアプリケーションの演習授業で推奨環境として指定している,Eclipse Pleiades All in oneでもPaizaCloudでも,少しの操作で利用可能なので,今週の授業では,使い方と実行例を一部穴埋めにして出題し,解答してもらいました.
 ここで気をつけることがあります(毎年,出題しています).「わ」がひらがなであることを確認するため,「Character.UnicodeBlock.of('わ')」を評価してみます.表示は以下のようになります.

|  JShellへようこそ -- バージョン17.0.3
|  概要については、次を入力してください: /help intro

jshell> Character.UnicodeBlock.of('わ')
$1 ==> HIRAGANA

 このとき,「Character.UnicodeBlock.of('わ')」は「HIRAGANA」と等しい,と判断してはいけないのです.実際,次のように比較してみると,エラーが出ます.

jshell> Character.UnicodeBlock.of('わ') == HIRAGANA
|  エラー:
|  シンボルを見つけられません
|    シンボル:   変数 HIRAGANA
|    場所: クラス
|  Character.UnicodeBlock.of('わ') == HIRAGANA
|                                    ^------^

 HIRAGANAはクラスCharacter.UnicodeBlockの定数であることに注意すると,次のように比較する必要があります.

jshell> Character.UnicodeBlock.of('わ') == Character.UnicodeBlock.HIRAGANA    
$2 ==> true

 授業から離れまして,Character.UnicodeBlock.of('わ')の評価結果が,クラスCharacter.UnicodeBlockのオブジェクトであることは,以下の式より知ることができます.

jshell> Character.UnicodeBlock.of('わ').getClass().getCanonicalName()
$3 ==> "java.lang.Character.UnicodeBlock"

 クラスCharacter.UnicodeBlockのオブジェクトであるかどうかの判定は,instanceof演算子を使用します.

jshell> Character.UnicodeBlock.of('わ') instanceof Character.UnicodeBlock     
$4 ==> true