浅析java 数据类型(引用类型、基本类型)

基本类型

包括int整型、float浮点型、已经boolean布尔值,整型包括byte(8bit)、short(16bit)、int(32bit)、long(64bit)、char(16bit)。

  1. byte  

    byte作为文件读写、网络数据传递最常用的数据格式,用于节省内存空间。byte取值范围为[-128, 127]。

    字面值计算 byte+byte 会自动升级结果为int,假如计算中出现double、float也会自动升级(顺序为 byte short int long float double)..

    一个有趣的问题,如果我们有个方法: public void test(byte b)。试图这么调用这个方法是错误的: test(0); 编译器会报错,类型不兼容!!!因为test(0)匹配的方法是public void test(int b)而不是public void test(byte b),因为0在字面值上是int类型的,而不会直接赋值.

    byte d = 'A';也是合法的,字符字面值可以自动转换成16位的整数。

  2. short

    最不常用的类型,取值范围为[- 2^15, 2^15 - 1],与byte一样,字面值计算时,会升级为int类型。

  3. int

    取值范围[- 2^31, 2^31 - 1],java 8 后,可以用int类型表示 2^32 位值。

  4. long

    64 bits, [- 2^63, 2^63 - 1,默认值为0L].当需要计算非常大的数时,如果int不足以容纳大小,可以使用long类型。如果long也不够,可以使用BigInteger类。

  5. char 

    16bit,[0, 65535], [0, 2^16 -1],从'\u0000'到'\uffff'。无符号,默认值为'\u0000'。

    char 型变量是用来存储 Unicode 编码的字符的, unicode 编码字符集中包含了汉字,所以,
    char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 
    码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。 补充说明: unicode 
    码占用两个字节,所以, char 类型的变量也是占用两个字节。

  6. float 

    32bit,使用32 bit表示,对应单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确

  7. double

    64为表示,将浮点子面子赋给某个变量时,如果不显示在字面值后面加f或者F,则默认为double类型。java.lang.Math中的函数都采用double类型。

    如果double和float都无法达到想要的精度,可以使用BigDecimal类

  8. boolean 布尔值

引用类型

    引用类型(reference type ) 指向对象的变量。

    在java里,除了基本类型,其他类型都属于引用类型,自己定义的class类实例化后也就是一个引用类型。如A     a = new A(); a就是一个引用类型的变量.

  1. 引用类型赋值

    引用类型的赋值与基本类型有所不同,如

    int x= 10;

    int y = x;

    这时,因为x/y属于基本类型变量,所以x.y拥有独立的变量(基本类型字面值出于读取速度考虑,会将字面值直接放在栈中)。

    String h = "hello";

    String z = h ;


    h,z指向同一对象。这时,若h="world",则会新创建一个"world"对象,并h指向新建的这个对象。z还是指向“hello”对象。

    java中的引用类型概念

  2. 按值传递和按引用传递的区别

    按值传递

    即对元数据进行一份拷贝,拷贝数据的变化与元数据无关。如:

    public test(int a){ a++;System.out.println(a);}

    public static void main(String args[]){

    int a = 10;

    test(a);

    System.out.println(a);

    }

    main输出的结果是 10; 

    test输出结果为11;

    按引用传递

    即传递变量的引用地址,若地址指向的变量改变,指向同一内存空间的变量同步改变。

    在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义的字符串方式:String str = "Java";


    

    


转载于:https://my.oschina.net/linyaohua/blog/648701

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值