数值之间==的比较

==

java中虽然有引用传递和值传递但只会值传递对于对象参数,值的内容是对象的引用
基本数据类型除Boolean都可以用==来判断是否是值相等

 public static void main(String[] args) {
		int  int_1=100;
		double double_1=100.0;
		if(double_1 == int_1 ){//本以为会是false,结果网上搜了之后,会自动转换。涉及到机组,以后买了书再来分析
			System.out.println("true");
		}
		System.out.println(double_1 == int_1);
	}

Integer 与 int

Integer 是 int 的包装类,int 则是 java 的一种基本数据类型

public static void main(String[] args) {
		int  int_01=100;
		Integer integer_01=100;
		Integer integer_02=new Integer(100);
		System.out.println(int_01 == integer_01);//true
		System.out.println(int_01 == integer_02);//true
		
		int  int_11=10000;
		Integer integer_11=10000;
		Integer integer_12=new Integer(10000);
		System.out.println(int_11 == integer_11);//true
		System.out.println(int_11 == integer_12);//true
	}

结论:基本数据类型与自己的包装类比较时都相等不管是不是new对象

Integer 与 Integer 比较

public static void main(String[] args) {
		Integer integer_1=100;
		Integer integer_11=127;
		Integer integer_111=128;
		Integer integer_1111=5555;
		
		Integer integer_2=100;
		Integer integer_22=127;
		Integer integer_222=128;
		Integer integer_2222=5555;
		
		System.out.println(integer_1 == integer_2);//true
		System.out.println(integer_11 == integer_22);//true
		System.out.println(integer_111 == integer_222);//false
		System.out.println(integer_1111 == integer_2222);//false
	}

结论:通过网上查阅,得出结论当第一个变量integer的值在-128~127之间时会缓存值,下一次出现同一值时不会去new对象并且
Integer integer_1 = 100 在编译时,会翻译成为 Integer integer_1 = Integer.valueOf(100)

Integer 与 new Integer() 比较

public static void main(String[] args) {
		Integer integer_1=100;
		Integer integer_11=127;
		Integer integer_111=128;
		Integer integer_1111=5555;
		
		Integer integer_2=new Integer(100);
		Integer integer_22=new Integer(127);
		Integer integer_222=new Integer(128);
		Integer integer_2222=new Integer(5555);
		
		Integer integer_3=new Integer(100);
		Integer integer_33=new Integer(127);
		Integer integer_333=new Integer(128);
		Integer integer_3333=new Integer(5555);
		
		System.out.println(integer_1 == integer_3);//true
		System.out.println(integer_11 == integer_33);//true
		System.out.println(integer_111 == integer_333);//true
		System.out.println(integer_1111 == integer_3333);//true
		
		System.out.println(integer_2 == integer_3);//true
		System.out.println(integer_22 == integer_33);//true
		System.out.println(integer_222 == integer_333);//true
		System.out.println(integer_2222 == integer_3333);//true	
	}

结论:很明显全是false,new对象时是在堆空间新建对象,Integer integer_1=100时是将值放在常量池

String 与 String 比较

public static void main(String[] args) {
			String string1="a";
			String string11="ab";
			String string111="aa";
			String string1111="a"+string1;
			String string11111="aa";
			
			String string2="a";
			String string22="a"+"b";
			String string222="a"+string1;
			String string2222="a"+string1;
			String string22222=string1+string2;
			
			System.out.println(string1 == (string2));//@1
			System.out.println(string11 == (string22));//@2
			System.out.println(string111 == (string222));//@3
			System.out.println(string1111 == (string2222));//@4
			System.out.println(string11111 == (string22222));//@5
	}

结果:
true
true
false
false
false
结论:因为String string1="a"是将值放在常量池,所以@1为true ,@2字符串拼接也为true是因为"a"与"b"都在常量池中,编译器直接拼接当成常量相加,没有new新对象,但@3@4@5都是后面加了一个字符串变量后就变了,是因为编译器不会去优化,不会去做常量处理于是我将string1与string2定义为常量后:

public static void main(String[] args) {
			final String string1="a";
			String string11="ab";
			String string111="aa";
			String string1111="a"+string1;
			String string11111="aa";
			
			final String string2="a";
			String string22="a"+"b";
			String string222="a"+string1;
			String string2222="a"+string1;
			String string22222=string1+string2;
			
			System.out.println(string1 == (string2));
			System.out.println(string11 == (string22));
			System.out.println(string111 == (string222));
			System.out.println(string1111 == (string2222));	
			System.out.println(string11111 == (string22222));	
	}

结果:全为true

String 与 new String() 比较

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值