原因写在前面:
字符串判断是否相等应该用
.equals
而不是
==
.equals
比较的是字符串
内容
,
==
比较的是字符串对象的
内存地址
。
更新后的解释:
只怪原来学艺不精,如果认真学过
.equals
和
==
的区别,这个问题就很很好理解,甚至就不会出现。
".equals"和"=="的区别
-
作用于
基本数据
类型时,是比较两个
数值
是否相等;
-
作用于
引用数据
类型时,是比较两个对象的
内存地址
是否相同,即判断它们是否为同一个对象;
.equals
:
-
没有重写
时,默认以
==
来实现,即比较两个对象的内存
地址
是否相同;
-
进行
重写
后,一般会按照对象的
内容
来进行比较。这里的重写是相对于Object类说的,java的所有类都继承了Object类。像本问题涉及到的String类,它就对equals()方法进行了重写,基本数据类型int的包装类Integer也重写了equals()方法,它们都是比较的对象的内容。
想对Object类有进一步了解,可以看
Java:Object
前面说了==比较的是内存地址,那java中关于字符串的地址有什么样的规则呢?
代码:
String s1 = "Runoob"; // String 直接创建
String s2 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String s5 = new String("Runoob"); // String 对象创建
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上。这段代码里,s1、s2、s3的地址是一样的,s4和s5的地址是不一样的,当然,与s1、s2、s3的地址也是不一样的。
关于Java String类的详细解释可以看 Java:String
以下是原答案
错误来由:
同样的程序,数据原来是在代码里写好的,后来改成了从键盘读入,然后就奇了怪了,同样的数据,原来就排序,为什么后来就不能排序?通过调试我发现,

在这一句判断完之后并没有执行花括号里的内容,但是我看这两个(字符串)变量明明相等啊

当我换回原来的代码又调试一次的时候我发现,这两个变量的id原来是相等的,键盘输入之后就不相等了

再然后就终于想起来字符串是用.equals判断的了呗。
采用 MyBatis 框架操作 MySQL 数据库时,判断传入的字符串 prmCreated 值为"N"时,执行相关操作,如下 xml 语句未生效:
<if test="prmCreated == 'N'">
and prm_closed = 0
2、原因
MyBatis 是使用 OGNL 表达式来进行解析的,在 OGNL 表达式中,'N’会被解析成字符。
因为 java 是强类型的,char 和 String 不等,所以 if 标签中的 SQL 不会
特殊格式如下:
if(oldStation.getProrgcode().equals(info.getProrgcode())){
System.out.println("雷猴啊!!");
这种格式猛的一看没有什
一、SQL介绍二、SQL组成部分三、DQL1、基础查询2、条件查询3、排序查询4、常见函数5、分组查询6、连接查询7、子查询8、分页查询9、联合查询四、DML1、插入2、修改3、删除五、DDL1、库的管理2、表的管理3、数据类型4、常见约束六、TCL七、视图八、变量九、存储过程十、函数十一、流程控制结构1、分支结构2、循环结构
一、SQL介绍
结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言
二、SQL组成部分
DDL,DML,DCL,DQL,TCL.
条件判断
在使用if()去判断一个数值的时,表达式求值后, js会自动将此值(这个值可以不是布尔值) 转换为布尔值。比如if(’’){console.log(‘1’)},因为空字符是false。所以不会执行后面,将条件中’'转换成布尔值。这里可以需要注意哪些会转换成true,哪些转换成false。需要注意几点,===和= =和=的区别。全等符号在判断的时候类型和数值都相等...
System.out.println("进入教师");
sql1 = "select * from jiaoshixinxi where jiaoshihao='"+username+"' and mima='"+password+"' ";
userlist1=commDAO.select(sql1);