Java中基础数据类型

基础数据类型总结

         a) 基础类型

             byte 8  char 16  short 16  int 32  float 32  long 64  double 64  boolean ~

             注意:

                  boolean类型的字节长度 ,并没有具体的规定。boolean只有两个值true、false。JVM再编译时期将boolean类型的数据转换成int类型,用1表示true,0表示false。JVM支持byte数组类型的数组,所以是通过读取byte数组来进行实现的。

          b) 包装类型

               Byte Character Short Integer Float Long Double Boolean

               自动拆装箱处理

                    自动装箱:将基本数据类型自动转换成对应的包装类

                    自动拆箱:将包装类自动转换成对相应的基本数据类型

     Integer i = 10;  //自动装箱
     int b = i;     //自动拆箱

                Integer i =10 其实就等同于Integer i = new Integer(10);减少了开发人员的工作,开发者不需要手动去new一个Integer对象。

           c) 缓存池

               1 自动拆装箱和缓存机制

   Integer integer1 = 3;
   Integer integer2 = 3;
   if(integer1==integer2) {
       System.out.println("integer1==integer2");
   }else {
       System.out.println("integer1!=integer2");
   }

   Integer integer3 = 300;
   Integer integer4 = 300;
   if(integer3==integer4) {
       System.out.println("integer3==integer4");
   }else {
       System.out.println("integer3!=integer4");
   }

          结果:

             integer1==integer2

             integer3 !=integer4

          解析:   

            可能都会认为两个if语句中都会返回false,但实际上第一个返回false,第二个返回true。

            正是因为缓存池的问题,在Java 5 之后,再Integer之后引入了一个新的功能为了节省内存和提高性能。Integer对象通过使用相同的对象引用实现了缓存和重用。

            但是只适用于整数值区间-128 至 +127。只适用于自动装箱,使用构造函数创建对象的时候不适用。

            Integer i = 3   等于 Integer i = Integer.valueOf(3);

            Integer i = 300 等于 Integer i = new Integer(300); 只有超出缓存值的范围之后才会创建对象。

        d) float 与double

               Java中不能执行向下转型,因为这会使精度降低。

               1.1 字面量是属于double类型的,不能直接将1.1赋值给float变量,向下转型会降低精度。

    float  f 1=1.1;//会提示报错

              1.1f 字面量才是float类型

   float f = 1.1f;

        e) 隐式类型转换

             字面量1 是int类型,比short精度要高,所以不能向下转型将int转换成short类型。

   short s =1;
   s = s1 + 1;//此句会报错,int类型不能转换成short类型的数据
   s + = ;//编译通过
   s++;//编译通过

        使用+= 或者 ++ 运算符可以执行隐式类型转换。相当于s = (short) (s + 1);

f) 参数传递

             Java 的参数的值是以值传递的形式传入到方法中,而不是引用传递

            下列代码的Dog dog 的dog是一个指针,存储的 是对象的地址。在将一个参数传入方法时,本质上是将对象的地址以值得方法传递到形参中。因此在方法中使用指针引用其他对象,这两个指针指向得是不同的对象,在一方改变之后内容之后对另一方没有影响。

    public class Dog {
        String name;

        Dog(String name) {
            this.name = name;
        }

        String getName() {
            return this.name;
        }

        void setName(String name) {
            this.name = name;
        }

        String getObjectAddress() {
            return super.toString();
        }
    }
    public class PassByValueExample {
        public static void main(String[] args) {
            Dog dog = new Dog("A");
            System.out.println(dog.getObjectAddress()); // Dog@4554617c
            func(dog);
            System.out.println(dog.getObjectAddress()); //  Dog@4554617c
            System.out.println(dog.getName());          // A
        }

        private static void func(Dog dog) {
            System.out.println(dog.getObjectAddress()); // Dog@4554617c
            dog = new Dog("B");
            System.out.println(dog.getObjectAddress()); // Dog@74a14482
            System.out.println(dog.getName());          // B
        }
    }
   class PassByValueExample {
        public static void main(String[] args) {
            Dog dog = new Dog("A");
            func(dog);
            System.out.println(dog.getName());          // B
        }

        private static void func(Dog dog) {
            dog.setName("B");
        //此时在方法中改变对象得字段值会改变原对象该字段值,因此此处改变的是同一个地址指向的内容。
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值