- PR -

session・requestで取得する・・・NULLと””について

投稿者投稿内容
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2004-02-05 13:10
> Javaでは、こんなことやってもWkdataの値は変わりませんよ。
> アドレス渡しのC言語とは違います。
>なにを勘違いしておられるのかわかりませんが、もちろん変わります。
変わらないのでは?
String strX = "a";
int intX = 0;
System.out.println("mae:"+strX+intX);
x(strX,intX);
System.out.println("ato:"+strX+intX);
=====
(関数)
public void x(String strX,int intX) {
strX="b";
intX=1;
System.out.println("naka:"+strX+intX);
}
=====
(出力)
mae:a0
naka:b1
ato:a0
=====
キャサリンさんは、
mae:a0
naka:b1
ato:b1
を期待しているのですよね?

追記
#私がキャサリンさんのやってること(やりたいこと)を勘違いしているみたいですね。
#すみません。
#でもま、Wkdataの値は変わらないかと。

[ メッセージ編集済み 編集者: Tomscissors 編集日時 2004-02-05 13:17 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-02-05 13:19
引用:

coasmさんの書き込み (2004-02-05 12:56) より:
> Javaでは、こんなことやってもWkdataの値は変わりませんよ。
> アドレス渡しのC言語とは違います。

なにを勘違いしておられるのかわかりませんが、もちろん変わります。


 変りませんって・・・。
引数の内容が変更されるのは、
下記のStringBufferを使用したパターンのような場合です。

※この手の問題はSJC-Pに必ず出題されます。

//サンプル
class Test{

public static void main(String args[]){
String str=null;
StringBuffer buffer = new StringBuffer();
replace(str);
replace(buffer);
System.out.println(str);
System.out.println(buffer);
}

private static void replace(String str){
str="test";
}

private static void replace(StringBuffer buffer){
buffer.append("test");
}
}
R-55
常連さん
会議室デビュー日: 2003/03/13
投稿数: 29
投稿日時: 2004-02-05 13:25
引数に代入しても元の変数は変わらないというのは同意しますが
キャサリンさんのコードの場合、さらにその後に

wkJOB_NAME=Wkdata;

とフィールド変数と思われるwkJOB_NAMEに代入しているので
結果としては変更されそうですね。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2004-02-05 13:32
>とフィールド変数と思われるwkJOB_NAMEに代入しているので
>結果としては変更されそうですね。
そのようなきもします^^;
#あまり一般的な挙動ではなさそうなのですが

>キャサリンさん
以前書かれていた方もそうなのですが、微妙に情報が足りない感じです。
出し惜しみ(?)せずに、いっそ、そのまま全てコピー&ペーストしてしまうぐらいで。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2004-02-05 13:57
確かに真の原因を探るにはもう少し広い範囲のソースをみないとわかりませんが
おそらく本当にnull値であれば(株)ぽちさんのコードで空文字列になると私は考えています。
・・・もしかして"null"という4文字の文字列が渡されていませんか??
キャサリン
会議室デビュー日: 2004/01/19
投稿数: 18
投稿日時: 2004-02-05 14:05
皆様ありがとうございます。
しかし、私が初心者の為、少し混乱してきてしまいました。
なんでだか意味がわからないまま、言われたとおりに試してみました。なぜか急にできるようになったのですが、その理由がわからなくなってしまいました。

なんか、私がわからなくなってきてしまったので、もう少し整理してから
また質問させて頂いてもいいでしょうか?
ほんとうに基本的な部分がわかってないのかもしれません。ご迷惑をかけてごめんなさい。
一応少しだけ(また出し惜しみ?になってしまいますが・・・)

<サーブレット内>
Regist_Bean db= new Regist_Bean();
db.setJOB_NAME(req.getParameter("JOB_NAME"));
db.execute();

<BEANS内>
public class Regist_Bean implements Serializable {

String wkJOB_NAME="";

public void execute(){

    System.err.println(wkJOB_NAME);
          }
public void setJOB_NAME(String Wkdata){
if (Wkdata==null){
Wkdata="";
}
wkJOB_NAME=Wkdata;
}

    
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-02-05 14:31
引用:

<サーブレット内>
Regist_Bean db= new Regist_Bean();
db.setJOB_NAME(req.getParameter("JOB_NAME"));
db.execute();

<BEANS内>
public class Regist_Bean implements Serializable {

String wkJOB_NAME="";

public void execute(){

    System.err.println(wkJOB_NAME);
          }
public void setJOB_NAME(String Wkdata){
if (Wkdata==null){
Wkdata="";
}
wkJOB_NAME=Wkdata;
}

    




このコードでnullが表示されるんですか?

上記コードであれば正常に動きそうですが。。

私が上記コードに似せて作ったものは動きますし。

コード:
<似非さーぶれっと役>
public class Main {
	public static void main( String[] args ) {
		String str = null;
		Bean bean = new Bean();
		bean.setName( str );
		bean.execute();
	}
}


<Bean役>
import java.io.*;

public class Bean implements Serializable {
	private String name = "";
	
	public void setName( String str ) {
		if ( str == null ) {
			str = "Nullを空文字に変換しました";
		}
		name = str;
	}
	
	public void execute() {
		System.err.println( name );
	}
}



JOB_NAMEという変数が本当にnullかどうか調べた方が
良いかも?
キャサリン
会議室デビュー日: 2004/01/19
投稿数: 18
投稿日時: 2004-02-05 14:36
返信ありがとうございます。
先ほど貼り付けたソースは、nullでなく、""で返ってきます。
最初からソースを貼り付けていれば、どこかがおかしくてnullで返ってきてたのか
わかったのですが、部分部分しか貼り付け無かった為、わからなくなってしまいました。
また何か煮詰まったときは質問させていただくかもしれませんので、その時は注意したいと思います。

皆様色々とありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)