• 数值比较有说头


    在测试过程中,经常会遇到有需要进行数值比较的地方,这个比较的数值用String字符串比较,还是数值比较会影响最终的程序结果;下面我们看下这两种比较结果有什么不同:

    1.String字符串比较,代码如下:

    class StringR {
        String s1 = "2.0";
        String S2 = "2.0";
        public void compare() {
            if (s1.equals(S2)) {
                System.out.println("S1和S2的数值相等");
            } else {
                System.out.println("S1和s2的数值不相等");
            }
        }
    }
    public class StringE {
        public static void main(String[] args) {
            StringR str = new StringR();
            str.compare();
        }
    }
    此时运行结果为:
    S1和S2的数值相等

    下面我们将s2的值增加小数位数,变为2.00即如下代码:

    class StringR {
        String s1 = "2.0";
        String S2 = "2.00";//值变为2.00
    
        public void compare() {
            if (s1.equals(S2)) {
                System.out.println("S1和S2的数值相等");
            } else {
                System.out.println("S1和s2的数值不相等");
            }
        }
    }
    
    public class StringE {
        public static void main(String[] args) {
            StringR str = new StringR();
            str.compare();
        }
    }
    此时运行结果为:
    S1和s2的数值不相等

    此时从数值上看,2.0和2.00没有多大区别,都是2,但是从字符串做比较的角度看,不难看出,此时用equals()方法比较的是字符串内容,此时肯定不相等;

     那为了避免出现这种比较差异,我们尽量用数值比较,此时便不会有这样的问题,看下面代码:

    class Number {
        String s1 = "2.0";
        String s2 = "2.0000";
    
        public void compare() {
            if ((new BigDecimal(s1)).compareTo(new BigDecimal(s2)) == 0) {
                System.out.println("两数值相等");
            } else {
                System.out.println("两数值不相等");
            }
        }
    }
    
    public class NumberDemo {
    
        public static void main(String[] args) {
            Number n = new Number();
            n.compare();
        }
    
    }
    此时运行结果为:两数值相等

    此时我们无论将s2设置为包含多少位小数,只要数值2不变,那么比较出来的值就永远相等;

    故在测试的时候:遇到数据类型为字符串,但是值却为数字组成的时候,此时如果将此值和预期做比较,那么一定要使用conpareTo()。而不能想当然的使用equals()方法;

  • 相关阅读:
    SpringBoot
    SpringBoot
    MySQL
    Database
    Database
    MySQL
    Debug
    《mysql必知必会》学习_第18章
    C#中访问私有成员
    精彩语录收集
  • 原文地址:https://www.cnblogs.com/haibaowang/p/9540959.html
Copyright © 2020-2023  润新知