java中String相等比较用==的场景 RT,通常用==运算符来判断相等都在什么情景下使用呢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 判断string 相等,在任何情况下最好用equals(), ==只会告诉是否指向同一个对象,不指向同一个对象也可能内容相等。equals方法会比较内容是否相等。 应该就是这个意思了。说的再深点,==比较的是内存引用地址,equals比较的是业务含义上的相等。比如实体类User有2个实例User1和User2,都有一个成员变量叫学号xuehao,业务上认为xuehao相等即为同一个用户,所以你会将User的equals方法重写,判断当xuehao相等返回真,即表示同一个用户。但此时如果你用==判断,2者一定是不等的,因为分别new出来的对象其内存地址一定不同。 String常量可以使用== String 要是只是比较值相等还是用.equals()方法,要是比较地址的话就用== 两个String的引用变量用==比较时,比较的是两个引用本身存储的值(两个地址值)是否相等,也就是是否指向了同一个对象;Object的equals()方法和==完全一样,都是比较两个应用变量是否指向了同一个对象;但是String类重写了equals( )方法,用来判断两个String引用变量指向的两个字符串是否包含完全相同的字符学列,是则返回true,否返回false;而==的作用不变(Java没有运算符重载) 一般来说“==”符号判断“对象”是否相等,而equal()方法判断的是“值”是否相等。下面是jdk关于equal的解释:equalspublic boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 equals 方法在非空对象引用上实现相等关系: 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。 对于任何非空引用值 x,x.equals(null) 都应返回 false。 Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 切记:== 对象:hashCode比较 基本数据类型:值比较 equals是纯值比较在String都是直接到常量池找的情况下: String st="123"; String st2="12"; String st3="123"; //这些就是直接到常量池找的 string的相同与相等对比String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("Hello");String s4 = s1;String s5 = "hello";String s6= "hello";相等性:(内存中内容是否相等)s1.equals(s2)------->trues1.equals(s3)------->falses1.equals(s4)------->trues1.equals(s5)------->trues1.equals(s6)------->trues1.equalsIgnoreCase(s3)---------->true;相同性:(引用的是否是相同的一块内存)s1 == s2 ---------->falses1 == s3 ---------->falses1 == s4 ---------->trues1 == s5 ---------->falses5 == s6 ---------->true String str = 常量或者null可以用== 判断是否==null时。 JAVA 文件解析--讨论散分 多个小数点比较的问题 点击按钮改变背景颜色的程序问题? 如何在树结构中显示数据库表中的内容 请问,要到什么程度才算掌握JAVA的多线程? applet连servlet的logger问题 关于日期格式处理的问题(检测环节比较复杂,可否实现) 我做了个聊天室程序,当我在向里面加图片时有点问题,我想加入本地images里面的图片可是用ImageIcon()只可以获取和.class文件同一目录的 急呀,在线等,菜鸟问题,高手帮忙 有谁用过java写过游戏? 请教高人一个Java Socket的长连接代码部署的问题。 菜鸟新手制作五子棋小游戏出现小问题,请大神解答
应该就是这个意思了。说的再深点,==比较的是内存引用地址,equals比较的是业务含义上的相等。比如实体类User有2个实例User1和User2,都有一个成员变量叫学号xuehao,业务上认为xuehao相等即为同一个用户,所以你会将User的equals方法重写,判断当xuehao相等返回真,即表示同一个用户。但此时如果你用==判断,2者一定是不等的,因为分别new出来的对象其内存地址一定不同。
Object的equals()方法和==完全一样,都是比较两个应用变量是否指向了同一个对象;
但是String类重写了equals( )方法,用来判断两个String引用变量指向的两个字符串是否包含完全相同的字符学列,是则返回true,否返回false;而==的作用不变(Java没有运算符重载)
equals
public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系: 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
切记:==
对象:hashCode比较
基本数据类型:值比较 equals是纯值比较
在String都是直接到常量池找的情况下:
String st="123";
String st2="12";
String st3="123"; //这些就是直接到常量池找的
String s2 = new String("hello");
String s3 = new String("Hello");
String s4 = s1;
String s5 = "hello";
String s6= "hello";
相等性:(内存中内容是否相等)
s1.equals(s2)------->true
s1.equals(s3)------->false
s1.equals(s4)------->true
s1.equals(s5)------->true
s1.equals(s6)------->true
s1.equalsIgnoreCase(s3)---------->true;相同性:(引用的是否是相同的一块内存)
s1 == s2 ---------->false
s1 == s3 ---------->false
s1 == s4 ---------->true
s1 == s5 ---------->false
s5 == s6 ---------->true