首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将String与Integer进行比较会产生奇怪的结果

将String与Integer进行比较会产生奇怪的结果,这是因为在进行比较时,编程语言会自动将String转换为Integer,然后再进行比较。这种转换可能会导致一些意想不到的结果。

例如,在Java中,如果将String "123"与Integer 123进行比较,实际上是在比较String的字符数组和Integer的数值。因此,它们可能会被认为是相等的,即使它们的类型不同。

为了避免这种情况,应该在进行比较之前,将String转换为Integer,然后再进行比较。例如,可以使用以下代码:

代码语言:java
复制
String str = "123";
int num = 123;

if (Integer.parseInt(str) == num) {
    System.out.println("Equal");
} else {
    System.out.println("Not equal");
}

这样可以确保比较的是两个相同的数值,而不是一个字符串和一个数值。

总之,在进行比较时,应该注意数据类型的转换,以确保比较的是相同的数据类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

string.length()-1比较为什么会出现匪夷所思结果

今天调试程序发现了个匪夷所思事情,-1string.length()比较永远是-1大,看下面代码 #include #include using namespace...-1<str.length() 这两段程序看似应该输出一样结果,可是实际却不是,这不禁让我想起来之前自己写一篇博客,C++中隐式类型换http://www.cnblogs.com/bewolf/p.../4358006.html 一查,果然是这样,str.length()返回值是unsigned int,如果直接-1比较的话,比较过程int会被隐式转化成unsigned int,所以-1变成很大数...,当然“-1就比3还要大了”,而如果str.length()赋值给int类型变量,那么像被赋值类型进行转换,所以str.length()会被转换成int类型,到时候就是-1和一个int类型变量比较...,结果就是我们想要正常结果了。

76080

Java语言中生僻知识

(c==d); } 乍一看,我们可能认为,输出结果要么都是true,要么都是false,但实际情况却让人大跌眼镜,正确结果是true和false。...(i); } 所以上面的代码就产生了这样奇怪输出。...原来,unicode解码发生在代码编译之前,编译器\u样式代码进行文本转义,即使是注释也是这样,然后\u000a被转换成\n换行符,所以println代码得以正常执行。 4....从上图可以看出,编译后顺序跟代码顺序不一样了,这看起来确实有些奇怪,背后原因是,出于性能考虑,JIT会对没有数据依赖指令进行重排,所以才会发生上面的情况。...7. 95%java代码毫无价值 最后,来一个比较轻松一点(或许是沉重?)冷知识。

33620
  • java反射技术案例之泛型擦除

    类型擦除也是Java泛型实现方式C++模板机制实现方式之间重要区别。 很多泛型奇怪特性都与这个类型擦除存在有关,包括: 泛型类并没有自己独有的Class类对象。...比如并不存在List.class或是List.class,而只有List.class。 静态变量是被泛型类所有实例所共享。...因为异常处理是由JVM在运行时刻来进行。由于类型信息被擦除,JVM是无法区分两个异常类型MyException和MyException。...对于JVM来说,它们都是 MyException类型。也就无法执行异常对应catch语句。 类型擦除基本过程也比较简单,首先是找到用来替换类型参数具体类。这个具体类一般是Object。...* 我来告诉大家,其实程序编译后产生.class文件中是没有泛型约束,这种现象我们称为 * 泛型擦除。

    1.2K10

    Java语言中生僻知识

    (c==d); } 乍一看,我们可能认为,输出结果要么都是true,要么都是false,但实际情况却让人大跌眼镜,正确结果是true和false。...(i); } 所以上面的代码就产生了这样奇怪输出。...原来,unicode解码发生在代码编译之前,编译器\u样式代码进行文本转义,即使是注释也是这样,然后\u000a被转换成\n换行符,所以println代码得以正常执行。 4....从上图可以看出,编译后顺序跟代码顺序不一样了,这看起来确实有些奇怪,背后原因是,出于性能考虑,JIT会对没有数据依赖指令进行重排,所以才会发生上面的情况。...7. 95%java代码毫无价值 最后,来一个比较轻松一点(或许是沉重?)冷知识。

    39830

    Java语言中生僻知识

    (c==d); } 乍一看,我们可能认为,输出结果要么都是true,要么都是false,但实际情况却让人大跌眼镜,正确结果是true和false。...(i); } 所以上面的代码就产生了这样奇怪输出。...原来,unicode解码发生在代码编译之前,编译器\u样式代码进行文本转义,即使是注释也是这样,然后\u000a被转换成\n换行符,所以println代码得以正常执行。 4....从上图可以看出,编译后顺序跟代码顺序不一样了,这看起来确实有些奇怪,背后原因是,出于性能考虑,JIT会对没有数据依赖指令进行重排,所以才会发生上面的情况。...7. 95%java代码毫无价值 最后,来一个比较轻松一点(或许是沉重?)冷知识。

    39920

    奇怪Java题:为什么128 == 128返回为false,而127 == 127返回为true?

    奇怪Java题:为什么128 == 128返回为false,而127 == 127返回为true? 在回答这个问题之前,我们先来看看int和Integer对比,一步步揭开问题答案。...2. intInteger深入对比 注:对于引用类型变量,==操作符比较是两个引用是否指向同一个对象;对于基本类型变量,==操作符比较是两个变量值是否相等。...,其内存地址不同 (2) Integer变量和int变量比较时,只要两个变量值是相等,则结果为true。...,java自动拆包装为int,然后进行比较,实际上就变为两个int变量比较 (3) 非new生成Integer变量和new Integer()生成变量比较时,结果为false。...而java API中对Integer类型valueOf定义如下,对于-128到127之间数,进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127

    2.2K31

    千万别踩,JDK中5个坑,否则别说你不知道

    Integer.parseInt()方法很矫情 事故现场:一次业务场景为拉取订单,打出订单列表记录,财务人员需要拉出对账,结果总是发现很奇怪一个现象,每次拉取少很多数据。...Integer.parseInt()方法用于字符串转化为Integer类型方法,此方法适用方向就显得比较窄,因为是String类型参数,没有任何限定,当在传入一些比如50.0、20L、30d、40f...modCount是list中用来记录修改次数一个属性,当对元素进行统计时候就会对该元素加1,而当对list边遍历边删除的话,就会造成 exceptedmodCount不一致,从而抛出异常。...select 5-null 结果返回null,所以在进行mysql计算时候,对于有可能出现null值列一定要进行·ifnull(field,0)·转换,null值转化为0,否则就会出现一些意想不到数据错误和空指针问题...: 正确姿势: 7.3.Stringsplit方法在进行||分割时候需要进行转义,否则结果会有问题 参考:http://ii081.cn/drl9e

    51150

    惊呆了,JDK中这些常用方法也有Bug?

    二:Integer.parseInt()方法很矫情 事故现场: 一次业务场景为拉取订单,打出订单列表记录,财务人员需要拉出对账,结果总是发现很奇怪一个现象,每次拉取少很多数据,。...Integer.parseInt()方法用于字符串转化为Integer类型方法,此方法适用方向就显得比较窄,因为是String类型参数,没有任何限定,当在传入一些比如50.0、20L、30d、40f...你开开心心用Bigdecimal进行了计算,而最终结果返回却有问题,我们来看一个栗子: ?...ps:接下来部分会比较简易点,阐述使用这个方法问题或者存在坑,这部分会持续更新,一旦在工作中发现有坑方法我会及时更新,同时欢迎大家留言补充这部分内容: 七:持续更新 ①Bigdecimal在比较时候...1和1.0在比较时候返回了false,这是因为在equals源码中进行了数据scale(也就是精度)比较,如果不一致就会返回false,如果使用compareTo方法就不存在这个问题

    43420

    int 和 integer :装箱和拆箱过程,会用到什么方法,你觉得这个会对性能有影响吗,原因是什么(百度一面)

    场景二、包装类型和基本类型大小比较 有没有人想过,当我们对Integer对象基本类型进行大小比较时候,实际上比较是什么内容呢?...真":"假"); 可以看到,包装类基本数据类型进行比较运算,是先将包装类进行拆箱成基本数据类型,然后进行比较。...= integer4"); } 我们普遍认为上面的两个判断结果都是false。虽然比较值是相等,但是由于比较是对象,而对象引用不一样,所以认为两个if判断都是false。...奇怪是,这里两个类似的if条件判断返回不同布尔值。 上面这段代码真正输出结果integer1 == integer2 integer3 !...(i2 == i3); true:i1源码是i3,i2和i3比较结果和i2i1比较结果相同,包装类和基本类型比较时自动拆箱 System.out.println(i2 == i4); true:包装类和基本类型比较时自动拆箱

    2.6K20

    详解Java自动装箱拆箱(Autoboxing and unboxing)

    第二个传入是一个String变量,它会先把它转换成一个int值,然后进行初始化。 ...2、i3和i4也进行自动装箱,执行了valueOf函数,它们值大于128,所以执行new Integer(200),也就是说它们会分别创建两个不同对象,所以它们肯定不等。 ...,跟Integer不一样,这样也不必奇怪,因为它们valueOf实现不一样,结果肯定不一样,那为什么它们不统一一下呢? ...value == value); }  我们指定equal比较是内容本身,并且我们也可以看到equal参数是一个Object对象,我们传入是一个int类型,所以首先会进行装箱,然后比较,之所以返回...所以,当 “==”运算符两个操作数都是 包装器类型引用,则是比较指向是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较是数值(即触发自动拆箱过程)。

    29040

    被JDK坑没商量?来试试这些方法吧

    正确处理方法: 二:Integer.parseInt()方法很矫情 事故现场:一次业务场景为拉取订单,打出订单列表记录,财务人员需要拉出对账,结果总是发现少很多数据,很奇怪一个现象。...Integer.parseInt()方法用于字符串转化为Integer类型方法,此方法适用方向就显得比较窄,因为是String类型参数,没有任何限定,当在传入一些比如50.0、20L、30d、40f...你开开心心用Bigdecimal进行了计算,而最终结果返回却有问题,我们来看一个例子: 常见除法用起来没有任何丝毫问题,妥妥.但是一旦程序中数据出现以下情况,如果用Bigdecimal来接受前端参数...是list中用来记录修改次数一个属性,当对元素进行统计时候就会对该元素加1,而当对list边遍历边删除的话,就会造成 exceptedmodCount不一致,从而抛出异常。...同事一个小小不谨慎和马虎就给公司造成了很多负面影响,技术问题虽然不大但是带来业务影响范围很严重。所以我们必须防微杜渐,小小问题都得细细打磨,才能避免很多问题产生

    45820

    包装类及 LeetCode 每日一题

    1.包装类创建对象 Java 为8大数据类型都提供了相应包装类,并提供属性和方法,更方便操作基本数据类型。包装类位于java.lang包中。 ?...利用基础类型包装类提供 valueOf(String s)静态方法字符串转成基本类型变量。 用 String 类提供多个重载 valueOf()方法基本类型转换成 String。...事实上从JDK 1.5 之后,Java 对包装类都提供了自动装包和自动拆包,我们完全可以一个基本类型数据直接赋给一个包装类变量,或者一个包装类赋值给一个基本数据类型变量,系统自动装包成相应对象或拆包成基本数据...4 System.out.println(s1); 也可以增加第二个参数,指定解码方式 3 比较 基本数值类型数据可以直接和其包装类进行比较,例如: 1 Integer num1 = 2; 2 //输出...其中也有一些奇怪现象: 1 Integer a = 2; 2 Integer b = 2; 3 System.out.println(a == b);//输出true 4 Integer biga =

    54030

    详解 Java 中自动装箱拆箱

    第二个传入是一个 String 变量,它会先把它转换成一个 int 值,然后进行初始化。...,跟 Integer 不一样,这样也不必奇怪,因为它们 valueOf 实现不一样,结果肯定不一样,那为什么它们不统一一下呢?...所以,当 == 运算符两个操作数都是 包装器类型引用,则是比较指向是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较是数值(即触发自动拆箱过程)。...3、equals(Object o) 因为原equals方法中参数类型是封装类型,所传入参数类型(a)是原始数据类型,所以自动对其装箱,反之,会对其进行拆箱 4、当两种不同类型用 == 比较时,包装器类需要拆箱..., 当同种类型用==比较时,自动拆箱或者装箱

    75400

    面试官:你看过StringhashCode源码吗?

    也就是说,哈希值会分布在一个较小数值区间内,分布性不佳,最终可能导致冲突率上升。 上面说了,质数2做为乘子导致哈希值分布在一个较小区间内,那么如果用一个较大大质数101产生什么样结果呢?...同时,我也针对不同乘子算出哈希值分布情况进行可视化处理,让大家可以直观看到数据分布情况。...最后我们再来看看 32 和 36 这两个偶数表现,结果并不好,尤其是 32,冲突率超过了了50%。尽管 36 表现要好一点,不过和 31,37相比,冲突率还是比较。...在详细分析之前,我先说说哈希值可视化过程。我原本是打算所有的哈希值用一维散点图进行可视化,但是后来找了一圈,也没找到合适画图工具。...写在最后 经过上面的分析实践,我想大家应该明白了 String hashCode 方法中选择使用数字31作为乘子原因了。本文本质是一篇简单科普文而已,并没有银弹。

    2K10

    科普:为什么 String hashCode 方法选择数字 31 作为乘子

    上面说了,质数 2 做为乘子导致哈希值分布在一个较小区间内,那么如果用一个较大大质数 101 产生什么样结果呢 ? 根据上面的分析,我想大家应该可以猜出结果了。...就是不用再担心哈希值会分布在一个小区间内了,因为 101^5=10,510,100,501。但是要注意是,这个计算结果太大了。如果用 int 类型表示哈希值,结果溢出,最终导致数值信息丢失。...同时,我也针对不同乘子算出哈希值分布情况进行可视化处理,让大家可以直观看到数据分布情况。...在详细分析之前,我先说说哈希值可视化过程。我原本是打算所有的哈希值用一维散点图进行可视化,但是后来找了一圈,也没找到合适画图工具。...写在最后 经过上面的分析实践,我想大家应该明白了 String hashCode方法中选择使用数字 31作为乘子原因了。 本文本质是一篇简单科普文而已,并没有银弹?。

    78910

    Java8编程思想(十二)-容器持有对象(下)

    要对结果进行排序,一种方法是使用 TreeSet 而不是 HashSet : 最常见操作之一是使用 contains() 测试成员归属性,但也有一些其它操作 能够产生每个元素都唯一列表是相当有用功能...如果想按字母顺序(alphabetically)对其进行排序,可以向 TreeSet 构造器传入 String.CASE_INSENSITIVE_ORDER 比较器....IntegerString 和 Character 可以 PriorityQueue 一起使用,因为这些类已经内置了自然排序。...如果执行操作修改这个 List ,并且不希望修改原始数组,那么就应该在另一个集合中创建一个副本。 小结 Java 提供了许多保存对象方法: 数组数字索引对象相关联。...集合不能保存基本类型,但自动装箱机制负责执行基本类型和集合中保存包装类型之间双向转换 像数组一样, List 也数字索引对象相关联,因此,数组和 List 都是有序集合 如果要执行大量随机访问

    56220

    为什么StringhashCode选择 31 作为乘子?

    也就是说,哈希值会分布在一个较小数值区间内,分布性不佳,最终可能导致冲突率上升。 上面说了,质数2做为乘子导致哈希值分布在一个较小区间内,那么如果用一个较大大质数101产生什么样结果呢?...同时,我也针对不同乘子算出哈希值分布情况进行可视化处理,让大家可以直观看到数据分布情况。...最后我们再来看看 32 和 36 这两个偶数表现,结果并不好,尤其是 32,冲突率超过了了50%。尽管 36 表现要好一点,不过和 31,37相比,冲突率还是比较。...在详细分析之前,我先说说哈希值可视化过程。我原本是打算所有的哈希值用一维散点图进行可视化,但是后来找了一圈,也没找到合适画图工具。...写在最后 经过上面的分析实践,我想大家应该明白了 String hashCode 方法中选择使用数字31作为乘子原因了。本文本质是一篇简单科普文而已,并没有银弹。

    42400

    面试官问:为什么StringhashCode选择 31 作为乘子?

    某天,我在写代码时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 实现,发现并不是很复杂。但是我从源码中发现了一个奇怪数字,也就是本文主角31。...也就是说,哈希值会分布在一个较小数值区间内,分布性不佳,最终可能导致冲突率上升。 上面说了,质数2做为乘子导致哈希值分布在一个较小区间内,那么如果用一个较大大质数101产生什么样结果呢?...同时,我也针对不同乘子算出哈希值分布情况进行可视化处理,让大家可以直观看到数据分布情况。...在详细分析之前,我先说说哈希值可视化过程。我原本是打算所有的哈希值用一维散点图进行可视化,但是后来找了一圈,也没找到合适画图工具。...所以如果不在意质数101容易导致数据信息丢失问题,或许其是一个更好选择。 写在最后 经过上面的分析实践,我想大家应该明白了 String hashCode 方法中选择使用数字31作为乘子原因了。

    32250
    领券