首页
学习
活动
专区
工具
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比较为什么会出现匪夷所思的结果

今天调试程序发现了个匪夷所思的事情,-1与string.length()比较永远是-1大,看下面代码 #include #includestring> 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类型的变量比较...,结果就是我们想要的正常结果了。

76980

Java语言中的生僻知识

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

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

    类型擦除也是Java的泛型实现方式与C++模板机制实现方式之间的重要区别。 很多泛型的奇怪特性都与这个类型擦除的存在有关,包括: 泛型类并没有自己独有的Class类对象。...比如并不存在ListString>.class或是ListInteger>.class,而只有List.class。 静态变量是被泛型类的所有实例所共享的。...因为异常处理是由JVM在运行时刻来进行的。由于类型信息被擦除,JVM是无法区分两个异常类型MyExceptionString>和MyExceptionInteger>的。...对于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代码毫无价值 最后,来一个比较轻松一点(或许是沉重?)的冷知识。

    40230

    Java语言中的生僻知识

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

    40420

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

    奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer的对比,一步步揭开问题的答案。...2. int与Integer的深入对比 注:对于引用类型变量,==操作符比较的是两个引用是否指向同一个对象;对于基本类型变量,==操作符比较的是两个变量的值是否相等。...,其内存地址不同 (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.3K31

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

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

    52650

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

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

    43820

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

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

    2.7K20

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

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

    29640

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

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

    46220

    包装类及 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 =

    54530

    详解 Java 中的自动装箱与拆箱

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

    77000

    面试官:你看过String的hashCode源码吗?

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

    2.1K10

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

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

    56420

    为什么String的hashCode选择 31 作为乘子?

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

    43000

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

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

    79710

    面试官问:为什么String的hashCode选择 31 作为乘子?

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

    32650
    领券