`
BestUpon
  • 浏览: 291554 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

两个极为低级的错误

阅读更多

都写程序这么长时间,还是不免会犯极为低级的错误,这两天,还真是因为一个低级错误,让我花了很多时间去调试它。

 

第一个:比较对象使用“=”

 

为了初始化权限和用户,需要系统一启动的时候,就要将用户名和密码都初始化好。然而,每一个所有的部门是很多的,要是全部初始化了,就没有这么一个低级错误了,需要初始化的是公司管理员。从数据库中找了找关系,使用的如下的SQL:

 

select * from ce_surveryArea where parentOrgNo="62101"

 

 结果得到了正常的结果。在后面过滤的时候,自然是想着也是父编号等于"621010".将代码自然写成了如下:

 

List<Role> areaRoles = new ArrayList<Role>();
		areaRoles.add(areaRole);
		for (SurveyArea surveyArea : surveyAreaManager.queryAllSurveyArea().getResultlist()) {
			if(surveyArea.getParentOrgNo().="62101") {
				generateUser(surveyArea, areaRoles);
			}
		}

 

 这样犯了一个什么错误呢?

在短暂的时间内看代码,因为自己的思维一直停留在等于 这个词上。看出来了什么错误么?

 

List<Role> areaRoles = new ArrayList<Role>();
		areaRoles.add(areaRole);
		for (SurveyArea surveyArea : surveyAreaManager.queryAllSurveyArea().getResultlist()) {
			if(surveyArea.getParentOrgNo().equals("62101")) {
				generateUser(surveyArea, areaRoles);
			}
		}

 

 正确的代码应该是上面的。原因何在呢?在JAVA中虽然字符串是常用对象——基本数据结构,但是他是String的对象,每次使用surveyArea.getParentOrgNo() 或的也是一个String的对象,“62101”这个字符串也是一个String对象,

两个对象使用“=” 做比较,比较的是两个对象的”引用“,永远都不会相等的——错误低级吧!

 

第二个:将局部变量当作全局变量使用:

有一段代码如下:

 

	private boolean checkSurveyAreaExeit() {
		User user = UserHolder.getCurrentLoginUser();
		user = userManager.queryUser(user.getUserID());
		surveyArea = surveyAreaManager.querySurveyArea(user.getSurveyAreaID());
		if (null != surveyArea) {
			return true;
		}
		return false;
	}

 

 在类的全局变量中也有如下的变量

 

	@Resource(name = "surveyArea")
	private SurveyArea surveyArea;

	@Resource(name = "user")
	private User user;

 

 在另外一处使用的时候,直接使用了如下代码:

 

@SkipValidation
	public String queryAll() {
		LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
		orderby.put("surveyID", "desc");
		
		
		if(!checkSurveyAreaExeit()){//如果不是地区管理员
			surveys = surveyManager.queryAllSurvey().getResultlist();
		}else{
			surveys = surveyManager.queryAllSurveyByArea(surveyArea, -1, -1, orderby);
		}
		
		if (surveys.size() == 0) {
			setOperationMessage("暂无可供填写的问卷!");
			return "tip";
		}
		return "list";
	}

 结果一直会报错。

 

经过仔细检查自己的错误,发现错误太低级了!

首先:在checkSurveyAreaExeit()方法中,不应该使用User user 这个临时变量。就算是使用了,也不该在queryAll()中把在checkSurveyAreaExeit() 中或的

 

surveyArea =surveyAreaManager.querySurveyArea(user.getSurveyAreaID());

 当做是是已经赋值来使用。原因是虽然当前的用户是getCurrentLoginUser(),但是将getCurrentLoginUser赋值给了一个局部变量User user,其获得值将会在checkSurveyAreaExeit()有效,在外面将失效!

比较合理的写法应该是:

 

	private boolean checkSurveyAreaExeit() {
		user = UserHolder.getCurrentLoginUser();
		surveyArea = surveyAreaManager.querySurveyArea(user.getSurveyAreaID());
		if (null != surveyArea) {
			return true;
		}
		return false;
	}
	@SkipValidation
	public String queryAll() {
		LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
		orderby.put("surveyID", "desc");
		
		
		if(!checkSurveyAreaExeit()){//如果不是地区管理员
			surveys = surveyManager.queryAllSurvey().getResultlist();
		}else{
			surveys = surveyManager.queryAllSurveyByArea(surveyArea, -1, -1, orderby);
		}
		
		if (surveys.size() == 0) {
			setOperationMessage("暂无可供填写的问卷!");
			return "tip";
		}
		return "list";
	}

   

两个低级错误,记录下来,引以为戒——需仔细!

分享到:
评论
2 楼 hilinw 2010-08-19  
==
用来作字符比较 ,
=
来作相等判断

是常容易犯的低级错误。
1 楼 shuiguozheng 2010-07-09  
记得在学校的时候也犯过同样的错误,呵呵

相关推荐

    任意相邻两个素数之间的最大距离公式

    标题中提到的“任意相邻两个素数之间的最大距离公式”,指的是数学上对于素数间隔的估计。素数间隔,或者说相邻素数间的距离,是指连续两个素数差值的大小。由于素数在自然数中的分布并不是均匀的,随着数值的增大,...

    高中数学中常见错误分析及解决策略

    高中数学中,指数和对数函数是两个极为重要的数学概念,它们不仅在高中数学考试中占有相当比重,而且在大学数学以及日常生活中的应用也非常广泛。然而,学生们在学习这些内容时,经常会遇到各种误区和错误。这篇文献...

    联通SGIP协议错误码

    若在同一个TCP/IP连接中发生两次或更多次的登录请求,系统会返回该错误码。开发者应检查应用逻辑,避免重复发送登录命令。 当单个节点请求建立的连接数量超过限制时,将触发错误码“3”,即连接过多。开发者需要在...

    行业-电子政务-用于控制两个集成电路之间的事务交换的方法.zip

    综上所述,"用于控制两个集成电路之间的事务交换的方法"这个主题涵盖了电子政务系统中的硬件交互、事务管理、通信安全、错误处理、并发控制等多个方面,对于理解和设计高效率、高安全性的电子政务系统至关重要。...

    matlab教程··包数字运算.符号运算和两个实验

    这对于理论分析和推导极为有用,尤其是在处理复杂的数学问题时。 3. **实验一:数值模拟**:在MATLAB中,可以编写脚本来模拟各种物理或工程现象。例如,可以使用ode45函数来解决常微分方程,模拟物体的运动轨迹。...

    两个化工控制的程序.rar

    标题中的“两个化工控制的程序.rar”表明这是一个与化工生产控制系统相关的软件包,可能包含了用于自动化控制化工过程的编程逻辑控制器(PLC)程序。AB PLC是Allen Bradley公司的产品,它在工业自动化领域广泛应用,...

    小学数学里错误率较高的几个典型错题.doc

    首先是计算题错误,这个问题在学生中极为常见。学生们掌握了简便运算的定律,但在应用上却出现混乱,特别是在乘除混合运算和加减混合运算中,经常按照凑整的方式处理,忽略运算顺序。例如,500÷25×4和34-16+14这...

    win7系统的网络连接一直提示错误797无法使用.docx

    在 Windows 7 系统中,网络连接错误 797 是一个常见的问题,导致用户无法连接到网络。这种错误通常是由 ADSL modem 连接设备未找到导致的。在本文中,我们将介绍如何解决 Windows 7 系统网络连接错误 797。 故障...

    ChatGPT技术的错误处理与用户引导方法.docx

    本文主要探讨了ChatGPT技术在实际应用中遇到的两个关键问题:错误处理与用户引导,并提出了解决方案。 ### 错误处理 #### 用户反馈机制 ChatGPT虽然强大,但在实际应用中难免会出现错误或不准确的回答。为了提高...

    蓝屏错误代码0x0000007b解决办法.docx

    在使用Windows操作系统的过程中,遇到蓝屏错误代码0x0000007b是一种极为恼人的体验。该错误代码通常出现在系统启动时,错误发生的原因多与系统中对SATA模式的更改有关。当BIOS设置将启动驱动器的SATA模式切换为AHCI...

    适合初学者 eclipse 极为简易的android软件记事本代码实例

    理解这两个组件的属性和用法是创建记事本应用的基础。 5. **SQLite数据库**:在Android中,常用SQLite作为本地数据存储。初学者应学习如何创建数据库、表,以及插入、查询和更新数据的方法。 6. **Intent和数据...

    小学数学计算规律.doc

    性质二是减去两个数的和,等同于从原始数中直接减去这两个数的和,如369-45-155。在简便计算中,这些性质可以帮助我们减少计算步骤。 拆分和凑整法是简便计算的常用策略。对于比整百、整千稍大的数,可以拆分为整数...

    量子纠缠與量子系統失序現象....

    在量子力学中,当两个粒子发生相互作用后分开,如果它们的波函数不能被分解为两个独立的波函数,则称这两个粒子是纠缠的。这意味着我们无法单独描述任何一个粒子的状态而不考虑另一个粒子的影响。例如,如果我们有两...

    深度解析 C++ 中 final 和 override 关键字的强大功能与应用

    而 final 关键字则从类的继承限制和虚函数重写禁止两个维度,为开发者提供了对类体系设计更强的掌控力,能够保护关键类和函数的完整性与确定性。在实际的 C++ 编程中,合理运用这两个关键字,无论是在构建复杂的类...

    2021版高考物理一轮复习第二章相互作用2力的合成与分解创新练2含解析

    将这两个分量平方和开方,我们得到总力F=sqrt(14.4^2+19.2^2)≈40 N,因此选项A正确,选项B错误。 接着,对于选项C和D,题目讨论了关门过程中锁壳碰锁舌的弹力变化情况。随着门的关闭,弹簧被进一步压缩,其弹力会...

    一个极为简单的requirejs实现方法

    7. 使用require()加载模块:在测试demo中,使用require()函数加载了两个模块define.js和define2.js,并通过回调函数获取这两个模块中的内容。这演示了如何加载并使用动态加载的模块。 8. 缺少容错机制:在示例中...

    计算机基础知识异或.pdf

    异或运算符的基本定义是:当两个相应的比特位不同时,结果为1;相同时,结果为0。这个特性使得异或运算在处理二进制数据时具有极其直接的效果。具体到异或运算符的特点,我们有: 1. 任何数与0进行异或运算,结果...

    全等三角形解答题答案解析.doc

    首先,我们要明确全等三角形的定义:如果两个三角形在形状和大小上完全相同,即它们的对应边和对应角分别相等,那么我们就称这两个三角形是全等的。全等三角形的性质不仅可以用来推导出线段和角的关系,还能解决一些...

Global site tag (gtag.js) - Google Analytics