String的equals比对方法和int类型的==比对方法,效率(时间快、性能开销低)哪个高?

麦田捕手 2020-04-30 03:41:13
早上做开发时想到的一个问题,当时的需求场景是列表中100个item(item中包括下载任务id、下载任务url等变量)元素,每个item都要更加下载进度实时刷新,下载回调接口进度更新方法中的形参有三个:int类型的下载任务id、String类型的下载任务的链接,还有个int类型的下载百分比。现有逻辑是在进度更新方法中根据String类型的url查找到item,再刷新列表。另一种方法我也试了,就是更加ing类型的任务id来查找到item,再刷新。
那我现在疑惑一下,这两种不同数据类型不同的比对方法,哪种的效率高一些?
...全文
971 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
android_cai_niao 2020-05-11
  • 打赏
  • 举报
回复
气死我了,上才艺!
    public static void main(String[] args) throws Exception{
        int a = 5;
        int b = 6;
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000_0000; i++) {
            if (a == b) {

            }
        }
        long useTime = System.currentTimeMillis() - startTime;
        System.out.println("useTime = " + useTime);
    }
经测试,运行时间为2 ~ 3毫秒。然后把变量类型改变一下,如下:
        String a = "5";
        String b = "6";
其它代码不变,运行时间为3 ~ 5毫秒。看到了吧,就是用==来比较String,它都比==比较int要慢,当然了==来比较String其实比较的是内存地址(也是int类型),但是内存地址一般是一个比较大的int值,所以cpu计算起来就慢一些。如果你用equals来比较String,那效率肯定更慢了。你可以像我这样写个Demo测试一下运行时间就知道了。
android_cai_niao 2020-05-11
  • 打赏
  • 举报
回复
如果我的回答解决了你的问题,麻烦结贴给点积分,谢谢^_^
南忆K 2020-05-08
  • 打赏
  • 举报
回复
不过Int的==肯定是比String.equals快的,因为String.equals至少也是有一次length(int类型)的==的
南忆K 2020-05-08
  • 打赏
  • 举报
回复
引用 2 楼 cch5487614 的回复:
int肯定比equal快。String的equal方法是hash之后比较hash值,本质上是一个CPU计算型运算,如果string特别大,计算过程会比较慢,1M的String应该在10ms左右。但是int的==方法,就是内存间的数据大小比较,是一个加减乘除的简单计算。


String.equals应该是先比较长度,然后再从头一位一位比较是否相同的
cch5487614 2020-05-04
  • 打赏
  • 举报
回复
int肯定比equal快。String的equal方法是hash之后比较hash值,本质上是一个CPU计算型运算,如果string特别大,计算过程会比较慢,1M的String应该在10ms左右。但是int的==方法,就是内存间的数据大小比较,是一个加减乘除的简单计算。
情谊梦幻 2020-04-30
  • 打赏
  • 举报
回复
可以自测一下,int类型的比较比String类型的比较快那么一丢

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧