Can not issue NULL query

来源:互联网 发布:java编程思想 新手 编辑:程序博客网 时间:2024/05/29 18:48

问题描述: 判断一个用户的性别,是男生就用“-1”判断,是女生就用“1”来判断,根据男女不同,执行的sql语句也不同。


前期我写了一个:String sql=null;

接着就是用if语句判断男女,在if里面为sql赋值。

但是测试的时候报错了,null query,debug的时候发现根本没有执行if语句。


原因在这里:

if(gender=="-1"){sql22 = "。。。。。。。。。。" ;}else if(gender=="1"){ sql22 = "。。。。。。。。。" ;}else{group.setResult_code("SQLException");}


因为gender是一个String类,String类是覆写了equals方法的,所以用gender.equals()是判断字符串的内容,而不是我以为的内存地址。

这里再附上 ==和euqals的区别:


1. == 是一个运算符。
2.Equals则是string对象的方法,可以.(点)出来。
我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较
  1、基本数据类型比较

  ==和Equals都比较两个值是否相等。相等为true 否则为false;

如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

  2、引用对象比较

  ==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;


需注意几点:

  1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;  2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。  所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;

  3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;
总结出来就是:
1、同一对象,"=="和equals结果相同
2、如果值不相同,对象就不相同,所以"==" 和equals结果一样
3、对象不同,内容相同,"=="返回false,equals返回true

1 0