package cc.openhome;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/hello.view")
public class HellowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String passwd = request.getParameter("password");
if(checkLogin(username, passwd)){
System.out.println("welcome");
}
else{
System.out.println("sorry");
}
} private boolean checkLogin(String username, String passwd) throws IOException {
// TODO Auto-generated method stub
String user1 = "zhangsan";
String user2 = "lisi";
String psd1 = "123";
String psd2 = "234";
if(username==user1 && passwd==psd1){
return true;
}
else if(username==user2 && passwd==psd2){
return true;
}
else{
return false;
}
}}这里的if(username==user1 && passwd==psd1){
return true;
}
else if(username==user2 && passwd==psd2){
return true;
}
else{
return false;
}和下面的有什么不同吗?改为equals就正确,我认为这两个是一样的,请大神指点......
public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
String test="test";
if(test=="test"){
System.out.println("相等");
}
}
}
java相等equals==
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/hello.view")
public class HellowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String passwd = request.getParameter("password");
if(checkLogin(username, passwd)){
System.out.println("welcome");
}
else{
System.out.println("sorry");
}
} private boolean checkLogin(String username, String passwd) throws IOException {
// TODO Auto-generated method stub
String user1 = "zhangsan";
String user2 = "lisi";
String psd1 = "123";
String psd2 = "234";
if(username==user1 && passwd==psd1){
return true;
}
else if(username==user2 && passwd==psd2){
return true;
}
else{
return false;
}
}}这里的if(username==user1 && passwd==psd1){
return true;
}
else if(username==user2 && passwd==psd2){
return true;
}
else{
return false;
}和下面的有什么不同吗?改为equals就正确,我认为这两个是一样的,请大神指点......
public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
String test="test";
if(test=="test"){
System.out.println("相等");
}
}
}
java相等equals==
解决方案 »
- java读取tif图片的宽高?
- java操作mysql,总是不行
- 关于让一个java project打成jar包后,加一个启动快捷同终止快捷
- Java1.5以上的范型,到底是编译时的还是运行时的?
- java IO文件操作的奇怪问题
- 对我来说比较头疼的问题,请大家帮忙
- 包如何使用??????
- 问scrollRectToVisible(new Rectangle(150,150,300,300));的用法!
- 请教各位!有关用javascript写函数来check输入框的问题!
- 各位请问载java中能动态的定义变量吗??就是用程序控制定义变量的个数!!
- 【请教】计算字符串中子串出现的次数
- 关于for的循环语句
String str = "abc";
String anotherStr = "abc";
System.out.println(str == anotherStr);对于String,Java会维持一个常量池,在普通main方法中运行的话,应该是true;
这里走了Servlet,我试了一下,是不相等的,我估计会不会是本地的JVM和Tomcat的内存什么的不太一样啊,求解释!!!
if(username==user1 && passwd==psd1){
return true;
}
else if(username==user2 && passwd==psd2){
return true;
}
else{
return false;
}
這裡的username 是個形式參數 user1是自己定義的一個局部變量,這是兩個不同的變量,它們有可能是兩個對象,注意是有可能! 所以當你用==進行比較的時候,結果不一定。 但是第二段代碼 如下:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String test="test";
if(test=="test"){
System.out.println("相等");
}
}
}
與第一個不同的是,只有一個String變量 test,所以就是自己跟自己進行比較了,結果就為true啦
在JAVA的字符串处理中有个字符串池,如果池中存在的字符串,是不会被新创建对象。
因字符串是常量,故可以直接引用,既然是同一个对象,那么用==进行比较则为true了。
return true;
}
else if(username=="lisi" && passwd=="234"){
return true;
}
else{
return false;
}也不行......
这篇文章倒是可以看看,是不是这里的 String username = request.getParameter("username"); String passwd = request.getParameter("password");
是heap中,而我建立的字符串是在String pool中地址不同,所以不能用"=="比较。
不知道这样理解对不对?求板砖
return true;
}
else if(username=="lisi" && passwd=="234"){
return true;
}
else{
return false;
}也不行......那麼對於這種情況 如果你傳入的username值也為"lisi" passwd為"234" 結果應該為true了,否則為false,但這樣其實比較的不是內容是地址。 根本原因就在於 字符串==比較的是引用地址值,字符串維護了一個字符串池,所有只要不是new出來的字符串 那麼相同的內容 會返回同樣的地址值,而不同的內容 肯定有兩個不同的地址值啦,String類的源代碼你可以看下,它重寫了hashcode和equals方法,所以如果你想要比較兩個字符串中的內容時 用equals方法 不要用==
没错。你可以试一下 String username = request.getParameter("username").intern();
intern() 方法返回与此 String 相等(equals)的常量池里的实例引用。
不过好像jdk1.7支持用等号了,以前的版本是不行的。
建议在比较字符串时还是用equals()方法