比较运算符在java中是如何工作的?

比较运算符在java中是如何工作的?,java,performance,comparison,Java,Performance,Comparison,最近有人告诉我,涉及较小整数的比较会更快,例如 // Case 1 int i = 0; int j = 1000; if(i<j) {//do something} // Case 2 int j = 6000000; int i = 500000; if(i<j){//do something else} //案例1 int i=0; int j=1000; if(iInt在32位系统上可能更快,而long在64位系统上可能更快。 我应该为它操心吗?不,你不需要根据你的需求来

最近有人告诉我,涉及较小整数的比较会更快,例如

// Case 1
int i = 0;
int j = 1000;
if(i<j) {//do something}

// Case 2
int j = 6000000;
int i = 500000;
if(i<j){//do something else}
//案例1
int i=0;
int j=1000;

if(iInt在32位系统上可能更快,而long在64位系统上可能更快。
我应该为它操心吗?不,你不需要根据你的需求来编码系统配置。微光化永远不会工作,它们可能会带来一些前所未有的问题。

Int在32位系统上可能更快,long在64位系统上可能更快。
我应该为它操心吗?不,你不需要为系统配置编写代码,而是根据你的需求编写代码。微光化永远不会起作用,它们可能会带来一些前所未有的问题。

小整数对象可以更快,因为java将它们视为特定对象


-128&&i小整数对象的所有整数值可以更快,因为java将它们视为特定的


所有的整数值为-128和& 如果你关心性能,你只需要考虑当代码编译成本地代码时会发生什么。在这种情况下,CPU的行为才是重要的。对于简单的操作,几乎所有的CPU都以相同的方式工作。

因此,案例1中的比较(如果条件)应该比案例2中的快。在案例2中,整数将占用更多的存储空间,但这可能会影响比较,我不确定

在Java中,
int
始终是32位的。这意味着它总是占用相同的空间。在任何情况下,数据类型的大小都不是很重要,例如,
short
byte
通常较慢,因为本机单词大小是32位和/或64位,它必须从较大的类型中提取正确的数据并对其进行符号扩展

我试图查看一个简单比较程序的JVM规范和字节码,但对我来说没有什么意义

JLS规定了行为,而不是性能特征

现在的问题是java中的数字比较是如何工作的

它的工作方式与几乎所有其他编译语言相同,它使用一条机器代码指令比较两个值,另一条指令根据需要执行条件分支

我想这也将回答为什么(或为什么不)任何情况会更快

大多数现代CPU都使用分支预测。为了使CPU管道保持满状态,它尝试预测将使用哪个分支(在它知道它是正确的分支之前)因此执行的指令没有中断。当这项工作正常时,分支几乎没有成本。当它错误预测时,管道中可能会充满错误猜测的分支的指令,这可能会导致严重延迟,因为它清除管道并选择正确的分支。在最坏的情况下,可能意味着100秒的时钟周期延迟

考虑以下几点

int i; // happens to be 0

if (i > 0) {
   int j = 100 / i;
假设通常执行分支。这意味着管道可能会加载一条指令,该指令会在知道不执行分支之前触发中断(或Java中的错误)。这可能会导致复杂的情况,需要一段时间才能正确展开


简言之,这些被称为每次/大部分时间都以相同的方式运行的分支速度更快,一个突然变化或非常随机的分支(例如,在排序和树数据结构中)如果你关心性能,你只需要考虑当代码编译成本地代码时会发生什么。在这种情况下,CPU的行为才是重要的。对于简单的操作,几乎所有的CPU都以相同的方式工作。

因此,案例1中的比较(如果条件)应该比案例2中的快。在案例2中,整数将占用更多的存储空间,但这可能会影响比较,我不确定

在Java中,
int
始终是32位的。这意味着它总是占用相同的空间。在任何情况下,数据类型的大小都不是很重要,例如,
short
byte
通常较慢,因为本机单词大小是32位和/或64位,它必须从较大的类型中提取正确的数据并对其进行符号扩展

我试图查看一个简单比较程序的JVM规范和字节码,但对我来说没有什么意义

JLS规定了行为,而不是性能特征

现在的问题是java中的数字比较是如何工作的

它的工作方式与几乎所有其他编译语言相同,它使用一条机器代码指令比较两个值,另一条指令根据需要执行条件分支

我想这也将回答为什么(或为什么不)任何情况会更快

大多数现代CPU都使用分支预测。为了使CPU管道保持满状态,它尝试预测将使用哪个分支(在它知道它是正确的分支之前)因此执行的指令没有中断。当这项工作正常时,分支几乎没有成本。当它错误预测时,管道中可能会充满错误猜测的分支的指令,这可能会导致严重延迟,因为它清除管道并选择正确的分支。在最坏的情况下,可能意味着100秒的时钟周期延迟

考虑以下几点

int i; // happens to be 0

if (i > 0) {
   int j = 100 / i;
假设通常执行分支。这意味着管道可能会加载一条指令,该指令会在知道不执行分支之前触发中断(或Java中的错误)。这可能会导致复杂的情况,需要一段时间才能正确展开


简言之,这些被称为每/大部分时间都以相同方式运行的分支速度更快,突然变化或非常随机(例如在排序和树数据结构中)的分支速度较慢。

在案例2中,整数不会占用更多空间!它们只是整数(32位=4字节)。IMHO,“某人”对你撒谎…这个问题的标题是尖叫“不要将字符串与
==
”进行比较