jsp中关于!=与equals()的问题

在一个jsp中声明两个String变量s1,s2,分别接收另一个jsp传输过来的数据,通过request.getParameter()给s1,s2赋值。当传过来的值相等时... 在一个jsp中声明两个String变量s1,s2,分别接收另一个jsp传输过来的数据,通过request.getParameter()给s1,s2赋值。当传过来的值相等时。System.out.print(s1==s2);输出结果为false,System.out.println(s1.equals(s2));输出结果为true;也就是说s1与s2指向不同的内存地址。
我知道,if判断的是两个变量是否指向同一内存地址,equal判断的是两个变量的值是否相等。这种接收页面传过来的数据动态给s1,s2赋值与直接声明并赋值String s1="s";String s2="s";有什么不同?为什么前者用==判断输出false而后者用==判断输出true?
通过这个实例我也知道s1,s2那样是指向同一内存地址,关键是最后两个问号提出的问题,那两种赋值为什么会产生这种不同。你们两位答和没答差不多,这个道理我也知道,关键是为什么会产生这种不同。
展开
 我来答
mynew100
2008-12-24 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:0
展开全部
String s1="s";String s2="s";
的时候,给s1赋值,JAVA到已经有的字符串常量中去找,看有没有"s",有的话,就直接用s1指向那个"s",没有的话,就new一个"s",再指向它,这样,这里的s1和s2都是指向的同一个"s".
如果你是request.getParameter()的话,JAVA先从参数中间拿到你的值,再用这个值new一个String对象,然后你的s1指向这个对象,这里s1,s2指向两个不同的对象。因为要保证你对每个参数的操作之间相互独立,所以会给你new一个对象
sinoluxuries
2008-12-24 · TA获得超过658个赞
知道小有建树答主
回答量:683
采纳率:0%
帮助的人:0
展开全部
System.out.print(s1==s2);//s1,s2存处於不同的地址空间
String s1="s";String s2="s";//s1,s2指向同一个地址的“s”常量(字符串池中,地址唯一。)
明白了麽?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hotapple
2008-12-24 · 超过19用户采纳过TA的回答
知道答主
回答量:65
采纳率:100%
帮助的人:53.4万
展开全部
(栈->堆->池)
前一个类似s1 = new String("a");s2=new String("a")
s1 - new String() - "a"
s2 - new String() /
比较s1和s2时,他们指向堆里不同的内存地址,然后指向常量池里的"a";;;

而后面一个s1="a"和s2="a",他们直接指向常量池"a"
s1 - "a"
s2 /
比较s1和s2时,他们指向常量池里同一“a”,常量"a"在常量池里只有一个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhc_westone
2008-12-24
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
你都明白了,二个"s"所在的内存地址是不一样的.S1和S2指向就不一样.而"S"=="S"明显是true了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式