当前位置: 代码迷 >> Java相关 >> 字符串这样什么不行
  详细解决方案

字符串这样什么不行

热度:93   发布时间:2011-11-22 21:06:32.0
字符串这样什么不行

import javax.swing.JOptionPane;
public class processInputData {

    public static void main(String[] args) {
   
        String name;
        while (true) {
        
                name = JOptionPane.showInputDialog(null,"Enter Name:");
            if(name=="ai"){
                System.out.println("程序结束");
                break;
                }
            }
        }
    }

搜索更多相关的解决方案: public  import  字符串  Enter  null  

----------------解决方案--------------------------------------------------------
字符串这样比较为什么不行,而要用equals()方法比较呢?求大虾解答~~
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2011-11-22 14:04:47
让我们飞

等 级:论坛游侠
帖 子:40
专家分:119
注 册:2011-1-9
  得分:2 
==比较的是 2个引用(内存地址)
equals是比较这个引用相应的值
当 String name=“ai”的时候在虚拟机的内部是:先建一个String name的引用,然后再栈中创建一个值为“ai"的引用o,再将name的引用地址指向“ai”的引用
name-->o的引用-->ai引用
而 “ai”是直接在栈中创建,如果栈中有那么直接将引用指向"ai"

所以用 == 比较的是  o的引用和 ai的引用 这个比较是不行的


----------------解决方案--------------------------------------------------------
楼主记住任何情况下都是本身的值比较,这里的引用的值其实就是字符串的地址,而不会每个字符的比较
不知道有没有说错,我也是初学者,以前学过C++是这样的,初感觉JAVA也是这种
----------------解决方案--------------------------------------------------------
==对比的是等式两个变量指向的内存
equals()对比的是两个变量的值
----------------解决方案--------------------------------------------------------
能记住更好,记不住也没太大关系,毕竟object类的equal方法子类是要覆盖的。
祝好
----------------解决方案--------------------------------------------------------
  相关解决方案