`
firefly.li
  • 浏览: 15135 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

String竟然可以用==比较!?

阅读更多
最近在做测试是遇到下面一段代码:

 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" String b="hello" a==b 返回true的问题分析

    String a="hello world"; //在java中有一个常量池,当创建String 类型的引用变量给它赋值时...可以用下面的语句: if(c.equals(d)) System.out.println("c==d"); else System.out.println("c!=d"); //输出 c==d

    Java基础复习(内附String中equals与==区别的分析)

    本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...

    Java String 字符串创建理解 equels和\"==\" 差异

    如果需要同时比较内容和引用,可以结合"=="和equals()一起使用。 在提供的压缩文件"str.java"中,可能包含一个示例代码,演示了上述创建字符串和比较的方法。通过分析这个文件,我们可以更深入地理解这些概念。为了...

    java 中String.equals和==的比较

    Java 中 String.equals 和 == 的比较 Java 中 String.equals...需要注意的是,在 Java 中,String 是一个特殊的类,它可以使用字面量来创建字符串对象,并且可以使用 intern() 方法将字符串对象添加到字符串常量池中。

    String对象创建问题

    `String`类在Java中被广泛使用,因为它代表不可变的字符序列,这使得它在很多场景下非常安全。这里我们将深入探讨`String`对象在编译期和执行期的创建方式以及它们之间的差异。 首先,我们来了解一下编译期的`...

    String中==与equals区别验证

    在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串(`String` 类)时。这两者之间的区别是理解Java内存管理和对象引用的关键。以下是对给定代码片段中所展示概念的详细解析。...

    StringtoList和StringtoMap和StringtoObject和StringtoArray

    如果JSON字符串代表的是一个自定义Java对象,你可以创建一个对应的类并使用Gson的`fromJson`方法将其转换: ```java class Fruit { private String name; private String color; // getters and setters... }...

    public static String[] split(String s, String regex)

    public static String[] split(String s, String regex) s参数为待拆分字符串, regex参数有两种格式: 单字符的字符串(长度1),功能如下:split(“ab#12#453”, “#”) 返回带5个元素的数组:ab, #, 12, #, 453 ...

    mailSender_v1.0.jar (For Android platform)

    基于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之间的转换

    ### VC、C++ 中 CString, int, string, char 之间的转换 在 C++ 开发过程中,数据类型之间的转换是常见的需求之一。对于 VC(Visual C++)开发环境来说,掌握不同字符串类型之间的转换方法尤为重要。本文将详细介绍...

    C++string类型的使用总结

    ### C++ `string` 类型的使用总结 在C++编程语言中,`string` 类是一种非常重要的数据结构,用于处理文本数据。本篇总结旨在详细介绍`string` 类的构造方法、常用操作方法及其功能特性。 #### 一、`string` 类对象...

    比较两个string(不区分大小写)

    在性能敏感的场景下,可以考虑使用特定的数据结构(如自定义的`CaseInsensitiveString`类)或算法来优化比较过程。此外,当比较的字符串较长时,可以考虑分块处理,减少一次性转换整个字符串的负担。 总的来说,不...

    String和string区别以及string详解.doc

    - 字符串相等性测试时,使用`string`比直接比较两个`String`对象更直观,因为它默认实现了值的比较而非引用的比较。 ### `string`详解 #### 声明空字符串 - `string s = string.Empty;` - 这种方式声明的是一个...

    CString,string,char的综合比较

    - 大小写不敏感的比较,`CString` 和 `string` 分别提供了 `_icmp`, `_icoll`, `Collate` 和 `casecmp` 方法,`char*` 可以使用 `_stricmp`, `_strnicmp` 函数。 综上所述,根据不同的需求和上下文环境,选择合适...

    C# char[]与string byte[]与string之间的转换详解

    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 String 使用详解是 Java 编程语言中最基础也是最重要的一部分,对于 Java 程序员来说,了解 String 类的使用方法是必不可少的。本文将详细介绍 Java String 的使用方法,包括 String ...

    java中String类型转换方法.pdf

    在 Java 中,将整型变量转换为字符串可以使用以下两种方法: * 使用 `Integer.toString()` 方法:`int i = 42; String str = Integer.toString(i);` * 使用字符串连接操作:`int i = 42; String str = "" + i;` ...

    java中String类型和int类型比较及相互转换

    对于两个String类型的比较,可以使用`compareTo()`方法。该方法返回一个整数值,表示第一个字符串相对于第二个字符串的排序位置。如果第一个字符串小于、等于或大于第二个字符串,则分别返回负数、零或正数。 ```...

    String型的不可变性

    在比较 String 对象时,我们需要使用 equals() 方法,而不能使用 == 操作符。因为 == 操作符只能判断两个对象的引用是否相同,而不能判断它们的值是否相同。例如,String str1 = "abc"; String str2 = "abc"; System...

Global site tag (gtag.js) - Google Analytics