最近在做测试是遇到下面一段代码:
if((m_strRound == "up") && (fExecute)){ //切り上げ
bdValue = bdValue.setScale(nLength, BigDecimal.ROUND_UP);
}else if ((m_strRound == "down") && (fExecute)){ //切り捨て
bdValue = bdValue.setScale(nLength, BigDecimal.ROUND_DOWN);
}
当时想都没想,直接提bug了。
结果跟测试式样书作成者一确认,在这段代码的类里面添加了main函数跑了一下,惊奇的发现,m_strRound设置为“up”或“down”的时候,程序竟然能够跑到分支里去。
写java程序也有两三年了,脑子里面有个根深蒂固的条律就是:比较String一定得用equals方法。但这里竟然使用==比较,并且成功了!?
非常不解,因此到google了一下,发现已经有很多人讨论并解释了这个问题,如下:
http://www.51ria.com/blog/?p=37l
恍然大悟!
但问题并没就此结束,虽然在我写的main方法里测试时,==有效。但当我在画面上(我们的工程是一个struts工程)输入m_strRound为“up”时,却没有跑出来期待的结果,通过打log发现,此时==就不管用了。
因此推断,struts将换面上的“ up”设置到form中时,可能是通过new String("up")生成的,反正跟后台代码中的“up”字符串的内存地址不同,所以==就不好使了。程序还是有bug,并且就是==号引起的。
看来,条律是对的,即使==在某些情况下是有效地,也不要使用它。因为它很有可能会带来bug,并且影响可读性。
最终判定,上面那段代码很烂!!
分享到:
相关推荐
String a="hello world"; //在java中有一个常量池,当创建String 类型的引用变量给它赋值时...可以用下面的语句: if(c.equals(d)) System.out.println("c==d"); else System.out.println("c!=d"); //输出 c==d
本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...
如果需要同时比较内容和引用,可以结合"=="和equals()一起使用。 在提供的压缩文件"str.java"中,可能包含一个示例代码,演示了上述创建字符串和比较的方法。通过分析这个文件,我们可以更深入地理解这些概念。为了...
Java 中 String.equals 和 == 的比较 Java 中 String.equals...需要注意的是,在 Java 中,String 是一个特殊的类,它可以使用字面量来创建字符串对象,并且可以使用 intern() 方法将字符串对象添加到字符串常量池中。
`String`类在Java中被广泛使用,因为它代表不可变的字符序列,这使得它在很多场景下非常安全。这里我们将深入探讨`String`对象在编译期和执行期的创建方式以及它们之间的差异。 首先,我们来了解一下编译期的`...
在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串(`String` 类)时。这两者之间的区别是理解Java内存管理和对象引用的关键。以下是对给定代码片段中所展示概念的详细解析。...
如果JSON字符串代表的是一个自定义Java对象,你可以创建一个对应的类并使用Gson的`fromJson`方法将其转换: ```java class Fruit { private String name; private String color; // getters and setters... }...
public static String[] split(String s, String regex) s参数为待拆分字符串, regex参数有两种格式: 单字符的字符串(长度1),功能如下:split(“ab#12#453”, “#”) 返回带5个元素的数组:ab, #, 12, #, 453 ...
基于Android平台的Mail Sender. 代码示例: 1.普通邮件: ... ... …… private void testJMailSender(){ String smtp = "smtp.sina.com";... String username = "xxxr@sina.com";...如使用有问题,请联系QQ:28185776
### VC、C++ 中 CString, int, string, char 之间的转换 在 C++ 开发过程中,数据类型之间的转换是常见的需求之一。对于 VC(Visual C++)开发环境来说,掌握不同字符串类型之间的转换方法尤为重要。本文将详细介绍...
### C++ `string` 类型的使用总结 在C++编程语言中,`string` 类是一种非常重要的数据结构,用于处理文本数据。本篇总结旨在详细介绍`string` 类的构造方法、常用操作方法及其功能特性。 #### 一、`string` 类对象...
在性能敏感的场景下,可以考虑使用特定的数据结构(如自定义的`CaseInsensitiveString`类)或算法来优化比较过程。此外,当比较的字符串较长时,可以考虑分块处理,减少一次性转换整个字符串的负担。 总的来说,不...
- 字符串相等性测试时,使用`string`比直接比较两个`String`对象更直观,因为它默认实现了值的比较而非引用的比较。 ### `string`详解 #### 声明空字符串 - `string s = string.Empty;` - 这种方式声明的是一个...
- 大小写不敏感的比较,`CString` 和 `string` 分别提供了 `_icmp`, `_icoll`, `Collate` 和 `casecmp` 方法,`char*` 可以使用 `_stricmp`, `_strnicmp` 函数。 综上所述,根据不同的需求和上下文环境,选择合适...
1、char[]与string之间的转换 //string 转换成 Char[] string str=hello; char[] arr=str.ToCharArray(); //Char[] 转换成 string string str1 = new ...//string 转换成 byte[] (字符串是用哪种编码生成的byte[]
Java String 使用详解 Java String 使用详解是 Java 编程语言中最基础也是最重要的一部分,对于 Java 程序员来说,了解 String 类的使用方法是必不可少的。本文将详细介绍 Java String 的使用方法,包括 String ...
在 Java 中,将整型变量转换为字符串可以使用以下两种方法: * 使用 `Integer.toString()` 方法:`int i = 42; String str = Integer.toString(i);` * 使用字符串连接操作:`int i = 42; String str = "" + i;` ...
对于两个String类型的比较,可以使用`compareTo()`方法。该方法返回一个整数值,表示第一个字符串相对于第二个字符串的排序位置。如果第一个字符串小于、等于或大于第二个字符串,则分别返回负数、零或正数。 ```...
在比较 String 对象时,我们需要使用 equals() 方法,而不能使用 == 操作符。因为 == 操作符只能判断两个对象的引用是否相同,而不能判断它们的值是否相同。例如,String str1 = "abc"; String str2 = "abc"; System...