<> 貌似比较的是ascii码,
[quote=引用 8 楼 sunle818 的回复:] 7楼说的这些我都懂,关键就是你最后一句话, int a=10; int b=20; a里面保存的是10,a和b肯定也是有地址的, 那么他们要比较,肯定也是需要通过地址找到这个值,才能进行比较, 那么问题来了,既然他们比较的是值, 那么我们是不是可以认为,它就是通过地址找到值,然后再比较里面的值吧,实际操作原理和equals一样吗?
我可以很明确的告诉你,>,<,这符号在汇编层面就是三句话cmp a,b。意思是比较a,b的大小。后面再加两句句如果a>b那么程序输出1,如果A<b输出0。 这两个符号表示的都是同样的意思,只不过是返回值相反而已。 而0和1保存在另一个寄存器中保存,你if括号中的东西就是从这个寄存器中取得的。>,<,只是符号,只是一个方法,相当于把上面的三句话封装成一个方法而已。而在汇编上的cmp指令拿的是地址里面的值,或者栈上的值。所以都是值,你写地址他拿的就是地址里的值,拿不了地址。这个命令就是这样规定的。 也就是说>,<相当于你封装的方法的名字 你完全可以不用这个符号表示这个方法,完全可以起个abc来表示这个方法的名字。
>,<号比较的是值。 我们可以写两个程序,来比较一下,就可以看出一些端倪,篇幅可能会有些长: 例子1: public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(i > b){ System.out.println("true"); }else{ System.out.println("false"); } } 例子2: public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(c > d){ System.out.println("true"); }else{ System.out.println("false"); } } 例子3: public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(a > e){ System.out.println("true"); }else{ System.out.println("false"); } } 例子4: public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(i == b){ System.out.println("true"); }else{ System.out.println("false"); } } 打印结果想必很容易得到: 例子1:true 例子2:true 例子3:程序报错,String不允许使用>符号 例子4:false 针对于例子2,比较值。例子3报错。没有什么疑问。接下来我们看例子1:例子4 针对于例子1,我们看看程序的class字节码: 我们来看30~37行字节码,我们看到,当我们调用>操作符的时候,java实际上是做了一次强制转换,将我们的Integer类型,转换为了int,然后再进行比较。 所以当我们使用例子3比较两个字符串的时候,由于无法转换为基础类型,所以直接报错。 那么我们再来看看例子4的class字节码: 我们再来看看35~37行字节码,由于==可以直接比较两者的地址,因此无需做任何转换,直接将两者的地址取过来进行比较即可。 如果楼主再问为啥>是取值,==就是取地址,表示能力范围之外就不知道了,或许java大神们觉得比较地址先后没有意义,但比较地址相等确实有意义的事。
public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(i > b){ System.out.println("true"); }else{ System.out.println("false"); } }
public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(c > d){ System.out.println("true"); }else{ System.out.println("false"); } }
public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(a > e){ System.out.println("true"); }else{ System.out.println("false"); } }
public class Test { public static void main(String[] args) { Integer i = new Integer(6); Integer b = new Integer(5); int c = 6; int d = 5; String a = ""; String e = ""; if(i == b){ System.out.println("true"); }else{ System.out.println("false"); } }
62,614
社区成员
307,327
社区内容
加载中
试试用AI创作助手写篇文章吧