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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

10811閲覧

【Java】Object型→int型への変換

RogerFederer

総合スコア19

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2018/08/13 03:39

実現したいこと

HTMLフォームから入力された情報をサーブレットで受け、JDBCでMySQLへ接続しレコード追加する

JSPで「◯行追加しました」とHTML表示する。

というコードを書いています。サーブレットからJSPで「◯行」の値を受ける時、オブジェクト型からint型へ変換する必要がある(と思っています)。

サーブレットのソースコード

Java

1※細かい部分は省略します 2 3// INSERTによる追加行数を取得し、JSPファイルをインクルード 4PreparedStatement dbSt = dbConn.prepareStatement("insert into ~省略~"); 5int result = dbSt.executeUpdate() 6request.setAttribute("Result", result); ★これをJSPで受ける 7String dispatch = "insert_result.jsp"; 8RequestDispatcher rd = request.getRequestDispatcher(dispatch); 9rd.include(request, response);

JSPのソースコード ★分からないのはココから

Java

1//サーブレットから受けた値をint型へ変換 23int result = ((Integer)(request.getAttribute("Result"))).intValue(); 4 56int result = Integer.valueOf(String.valueOf(request.getAttribute("Result")));

試したこと

上記①も②もどちらも試したところ、どちらでもエラーなくresult変数から数字を取得できました。

質問内容

① どちらがより「正しい」変換なのでしょうか。(それとも、優劣はないのでしょうか・・・)

② これ以外に、request.getAttributeで受けたオブジェクト型変数をint型へ変換する(より良い)方法はあるでしょうか。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/08/13 04:05 編集

ああJSP側かこっちのは誤り
guest

回答2

0

ベストアンサー

ちょっと説明がてら

int result = ((Integer)(request.getAttribute("Result"))).intValue();

まずこちらは 取得時に Objectにラップされた Integerなのでキャストは可能です。

int result = Integer.valueOf(String.valueOf(request.getAttribute("Result")));

こちらは正しく変換されますが String に変換が走るため処理コストが高いです。

ただ今回のソースだと、加算するような情報じゃないので変換しないでもいいです。

投稿2018/08/13 04:12

編集2018/08/13 04:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

RogerFederer

2018/08/13 05:23

回答頂きありがとうございますm(_ _)m > ただ今回のソースだと、加算するような情報じゃないので変換しないでもいいです。 たしかに、この場合は Object resultで受けてしまえば問題ないことに言われて気付きました・・・。大元のexecuteUpdateがint型で返すという点に思考が引っ張られていました。 > String に変換が走るため処理コストが高い なるほど、よく見ると1ステップ多いのですね。①の方が②よりも良いコードだという風に理解しました。
退会済みユーザー

退会済みユーザー

2018/08/13 08:30 編集

そうそう①のコードも②のコードも今回のでは必要なく Object result = request.getAttribute("Result") で out.println(result); の処理で十分ってこと
guest

0

以下でいいんじゃないでしょうか。

Java

1int result = (int) request.getAttribute("Result");

投稿2018/08/13 04:07

root_jp

総合スコア4666

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

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

RogerFederer

2018/08/13 05:23

回答頂きありがとうございますm(_ _)m 私も最初は(int)でキャストをしたのですが、以下エラーが出てしまったため①②のような方法をネット上から漁って見つけた次第です。 「不適合な型: java.lang.Objectをintに変換できません:」
root_jp

2018/08/13 05:44

あれ、そうなんですか。 Object obj = new Integer(1); int i = (int) obj; がいけるので、てっきりいけるのかと思いました。失礼しました。 では、①のやり方でいいと思います。②よりは①の方がいいです。
退会済みユーザー

退会済みユーザー

2018/08/13 08:28

プリミティブ型は保持できなかったよなたしかとかちょっと不確定だったから家の回答には書かなかったけど ダイヤモンド演算子(総称型)のもにに突っ込むと「オートボクシング」が動作するからね。 int なら Integer になる
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問