java中equals和==的使用
来源:互联网 发布:淘宝金牌卖家入口 编辑:程序博客网 时间:2024/06/07 04:56
问题由来:今天做了一个Excel表数据导入数据库的java项目,Excel表中是人员信息,其中一条是性别(sex)。性别(sex)从Excel表存入数据库是这样一个过程:先从Excel表中存入一个String类型的变量sex中,比如男就存“男”,女就存“女”。然后这个属性要存入实体类(user)中。因为实体类(user)中性别(sex)存的是Boolean型的,所以就要解决把性别从String转换成Boolean型的问题。我是这样解决的:用一个Boolean型变量sex1来接这个值。如果前面的string变量sex是“男”的话,sex1就等于true,否则就等于false。这时就涉及到一个问题,判断sex是等于“男”,还是“女”。这也就引出了博文的主体,用==还是equals。
当时我在做这个java程序的时候,我就错误的用成了==,导致的后果是我的所有记录的性别(sex)的属性值都是false。
下面是我当时的错误代码:
boolean sex1;if(sex=="男"){sex1=true;}else{sex1=false;}
我就开始debug,发现程序总是走的else,执行sex1=false;我就想为什么if里面的(sex==“男”)总是不执行呢?原来(sex==“男”)永远也不成立。但是为什么不成立呢?因为这里的sex是一个对象(通过方法String sex=rs.getCell(j++, i).getContents()创建),java会为在内存中为sex分配自己的内存堆(分享一篇博文讲的内存堆),这个内存堆和“男”的内存堆肯定不一样,而sex==“男”就是比较他们的内存堆是否相同,所以这个永远不会成立。
后来我把代码改成下面这样就对了:
boolean sex1;if("男".equals(sex){sex1=true;}else{sex1=false;}
原因也很简单:因为equals方法只是简单的比较二者的内容是否相等(前提是二者的数据类型要一样),显然二者是有可能相等的(我Excel表中性别存的就是“男”和“女”)。
如果还是不太明白我下面有一个更简单易懂的例子,保证一看就会:
public static void main(String[] args) { // TODO 自动生成的方法存根 /* * * 对这个问题做一个分析 * 第一个例子通过new对象的方式创建了s1和s2,这是String作为对象来使用,会给s1和s2分配各自的内存堆,所以s1==s2(用"=="来比较,这种比较是针对两个String类型的变量的引用,即比较内存堆是否相同)打印出来false * 第二个例子,通过String s3="123"来创建s3和s4,这是String作为引用类型来使用,都是引用了"123"这个字符串,所以第二个例子的s3==s4打印出来是true * 至于equals嘛,就是简单的比较内容是否相等,所以两次equals打印都是true */ /** * 打印结果: * * false * true * /////////////////////////// * true * true */ /* * 第一个例子 */ String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); /* * 第二个例子 */ String s3="123"; String s4="123"; System.out.println("///////////////////////////"); System.out.println(s3 == s4); System.out.println(s3.equals(s4)); }
那么一个新的问题:如果二者数据类型一样的话,是不是可以一直用equals来判断二者是否相等?
这个问题有待考证,但是equals的使用规则有一点是可以确定的—二者的数据类型必须一样。
还有一个问题:数据类型不同的两个变量用==,能否判断相等?
这个问题经过考证可以,==成立的规则是:只要两个数据的引用堆一样,就返回true,二者的数据类型可以不同(当时测试的时候是一个String类型和一个byte类型)
- java中使用equals和==比较的区别
- java中equals和==的使用
- 在JAVA中,== 和equals使用记录
- Java中使用==和使用equals来比较两个字符串的区别
- java中String 的==和equals;String直接赋值和使用new String()
- Java中 hashcode 和 equals、equals和==
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- String 和Integer中 == 和 equals的使用
- Java 中 equals 和 == 的区别和联系
- Java中==和equals的区别和联系
- Java中==和equals的区别,equals和hashCode的区别
- Java中equals和==的区别,hashCode和equals的关系
- Java中==和equals的区别,equals和hashCode的区别
- Java 中==和 equals 的区别, equals 和 hashCode 的区别
- Java中==和equals的区别,equals和hashCode的区别
- 关于《我的前半生》观后感
- ubuntu如何利用终端单步执行程序
- Python与机器学习4
- HYSBZ
- 初步学习大数据
- java中equals和==的使用
- ES6之变量的解构赋值
- android 高级之旅 (十) android进程间通信
- Android Studio自定义插件编写——Android Plugins
- Java关键字final、static使用总结
- ContentProvider内容提供者与ContentResolver内容访问者
- 继承
- 冒泡排序
- 算法题