Java中数据类型的传递

1、在Java中基本数据的传递是通过值传递进行的。

2、引用数据类型的传递是通过地址传递进行的。

public class Relative {

 public static void main(String[] args) {
  int a = 5;
  int b = 5;
  
  double c = 10;
  double d = 10;
  
  Integer e = 100;
  Integer f = 100;
  
  Integer ee = 200;
  Integer ff = 200;
  Integer h = e + f;
  
  String aa = "abc";
  String bb = "a" + "bc";
  String cc = "a";
  String dd = "bc";
  String m = cc + dd;
  String n = new String("abc");  
  System.out.println("a == b " + (a == b));        // a == b true
  System.out.println("c == d " + (c == d));        //c == d true
  System.out.println("e == f " + (e == f));          //  e == f true
  System.out.println("ee == ff " + (ee == ff));    //  ee == ff false
  System.out.println("h == ee " + (h == ee));    //  h == ee false
  System.out.println("aa == bb " + (aa == bb));// aa == bb true
  System.out.println("aa == m " + (aa == m));  // aa == m false
  System.out.println("m == n " + (m == n));      //m == n false
  System.out.println("aa == n " + (aa == n));    // aa == n false

  
 }

}

总结:

我们发现a,b,c,d,e,f,ee,ff,h都是基本数据类型,他们的传递方式应该是值传递,那么a==b,c==d,e==f,ee==ff,h==ee,都应该是true,但是通过以上代码的测试我们发现ee==ff,h==ee都是false,那是因为Interger类型的传递要经过一个valueOf方法来判断是否需要创建一个新的地址去存储这些变量 

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }因为200大于127了所以Inter在传递ee,ff和h的时候要先进行装箱操作,需要给他们分配一个新的地址,所以他们的传递是通过地址进行传递的,所以为false。

aa,bb,m和n都是字符串他们进行传递的时候都是通过地址进行传递的aa==bb是true是因为编译器在进行编译的是把"a" + "bc"直接合并成了"abc",所以aa和bb的值是一样的所以bb分配地址的时候就会去引用aa的地址。

m==aa为false是因为cc + dd是一个运算编译器并不会进行运算,程序在运行的时候是先给m创建了一个地址然后才把cc + dd的结果赋给了m,系统在给m分配地址的时候并不知道m内的值和aa一样,所以m不会引用aa的地址。n也是在程序运行的时候先给他分配了一个地址然后才会执行把"abc"赋给n的程序所以n的地址和m以及aa的都不一样。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值