文字列同士の等値比較という初歩的なミスを繰り返さないために、シャレを考えてみた(IT勉強記録)
備忘録でございます_φ( ̄ー ̄ )そしてやっとこさ、はてブのはてな記法デビュー\( ˆoˆ )/
コードきれいに表示されて感動する〜
「初学者がやりがち」とされる以下のトラップにまたハマってしまったので、自戒も込めて!
Javaで文字列同士を比較する場合、Stringクラスは参照型だから等値比較でなく等価比較せねばならない。と認識していますが
また等値比較やっちまったぜ…
前回の記事でひっそりと宣言した通り、2022年1月の転職に向けてSpring bootでポートフォリオを作成するんですが
急がば回れということでサーブレット&JSPをさらっと復習した方が良さそうだな〜と思い、こちらのテキストで手を動かし中ながら勉強中でして。
その練習問題中で、トラップにハマってしまったのでした。
sukkiri.jp
▼上記テキスト中の練習問題(フォームを使ったユーザー登録もどきの作成)で私が書いたコード
※環境:IDE(Eclipse_2019-12)を使用・OSはmacOS Big Sur
formSample.jsp(入力フォームをレスポンスするJSPファイル)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登録フォーム</title> </head> <body> <form action="/exampleFrom7/FormSampleServlet" method="post"> 名前<br> <input type="text" name="name"><br> 性別<br> 男<input type="radio" name="gender" value="0"> 女<input type="radio" name="gender" value="1"> <input type="submit" value="登録"> </form> </body> </html>
【このコード内でやってしまった】FormSampleServlet.java(登録結果画面をレスポンスするサーブレットクラス)
package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class FormSampleServlet */ public class FormSampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //リクエストパラメータの受け取り request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String gender = request.getParameter("gender"); String msg = ""; boolean isOK = true; if(name == null || name.length() == 0) { msg += "名前が入力されていません<br>"; isOK = false; } if(gender == null || gender.length() == 0) { msg += "性別が選択されていません<br>"; isOK = false; }else { if(gender=="0") { gender = "男性"; }else { gender = "女性"; } } if(isOK) { msg=name + "さん(" + gender + ")を登録しました"; } response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>ユーザー登録もどき</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>" + msg + "</p>"); out.println("</body>"); out.println("</html>"); } }
そう、登録された性別を確認するif文条件式内で、文字列同士の等値比較をしてしまっていました。正しくはこう、
if(gender.equals("0")) {
ですね。等値比較の記述でもコンパイルエラーにはならないけど、たまに動きがおかしくなる、といういや〜なもの。
もうこんな初歩的なミスを繰り返すまい!と思って、思いついたイメージがこちら。
「もじもじ(文字文字)したらあかん」
なんかこう色んなヤバさを醸し出す記事と画像ですが、恥はかき捨てです_φ( ̄ー ̄ )笑
ずさんな勉強記録になってしまったけど、ちょっとずつ精度上げて、有益な技術ブログをも執筆できるようになるぜい。
読んでくださりありがとうございましたm(_ _)m