java中的规则_Java中==规则

普通对象==

一般说来,java中的==指的是比较两个对象的内存地址是否相同。同时,在java中,一旦使用new关键字,则说明在内存中开辟了一段空间,用于存储对象。

假设我们有一个Person类,请看下面的代码:

classPerson

{}public classHello

{public static void main(String[] args) throwsException

{

Person p1= newPerson();

Person p2= newPerson();

Person p3=p1;

System.out.println(p1== p2);//false

System.out.println(p1 == p3);//true

System.out.println(p2 == p3);//false

}

}

第一个输出false,因为p1和p2都用new关键是生成了实例,p1和p2分别指向两块内存空间。

第二个输出true,因为p1将地址赋值给了p3,p1和p3同时指向一块空间。

第三个输出false,因为p3指向的是p1开辟的空间,p1和p3完全等价。p2指向另一块空间,p2==p3显然不成立。

0b24737113472b3e204a3c2edda6eccd.png

String中的==

这是一般意义上的类和实例的内存分配规则。然后当遇到String类的时候,会有一点点变化。因为Java中String的不可变原则,使得用字面值“XXX”复制给一个String变量的时候,被赋值的变量永远指向同一块区域。请看下面的代码:

1 public classHello2 {3 public static void main(String[] args) throwsException4 {5 String s1 = "XXXX";6 String s2 = new String("XXXX");7 System.out.println(s1 == "XXXX");//true

8 System.out.println(s2 == "XXXX");//false

9 System.out.println(s1 == s2);//false

10 }11 }

在讲解输出结果前,大家先树立一个概念,就是当遇到字面值的字符串的时候(如"XXXX"),它就代表了内存中的一个永远不会改变的对象。

第一行输出true,因为上面说过,"XXXX"无论出现在程序的哪个地方,它都永远是同一个对象。代码第5行将"XXXX"地址给了s1,所以s1就指向了"XXXX",所以第7行输出true。

第二行输出false,因为代码第6行使用了new关键字,实例化了一个全新的字符串对象,开辟了一块全新的空间(任何时候使用new都会开辟新空间),所以s2指向的地址和"XXXX"完全不同。

第三行输出false,因为s1指向的是"XXXX"的地址,而s2使用nwe新开辟地址,所以s1地址不等于s2地址。

整数数字对象==

当遇到数字对象使用==比较的时候又有一点变化,原则如下:

当==两边任意一边有字面值(如 100)的时候,则只会比较其真实值。

当==两边都没有字面值时,等号两边的任意一边变量如果使用new关键字实例化,结果为false。

当等号两边的变量都不是使用new关键字实例化时,有两种情况: 1 数值在-127到+128之间,比较结果为true,否则为false

请看下面的代码:

1 public classHello2 {3 public static void main(String[] args) throwsException4 {5 {6 Integer a = 100;7 Integer b = new Integer(100);8

9 //当==两边任意一边有字面值(如 100)的时候,则只会比较其真实值。

10 System.out.println(a == 100);//true

11 System.out.println(b == 100);//true

12 }13

14 {15 Integer a = 100;16 Integer b = new Integer(100);17 //当==两边都没有字面值时,等号两边的任意一边变量如果使用new关键字实例化,结果为false。

18 System.out.println(a == b);//false

19 }20

21 {22 Integer a = 100;23 Integer b = 100;24 //当等号两边的变量都不是使用new关键字实例化时,有两种情况:25 //1 数值在-127到+128之间,比较结果为true

26 System.out.println(a == b); //true

27

28 a = 500;29 b = 500;30 //2 数值在-127到128之外比较结果为false

31 System.out.println(a == b);//false

32 }33 }34 }

Java中的==是一个非常让人难以理解的概念。

欢迎加入QQ群参与讨论. 422683877

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值