数据类型转换-运算符

##基本数据类型转换
 - 默认顺序是
  * byte->short->int->long->float->double
 - 自动提升规则(针对二元操作符)
  * 所有的byte,short,char型会自动提升为int型
  * 若一个操作数是long类型,则另一个操作数也会转换为long类型,计算的结果类型也是long类型
  * float类型,double类型跟long类型的提升规则一样 
  
 - 注意
  * 默认浮点型是double类型,默认整型是int类型
  * 举例说明:
  
   ```

       float f1=4.4;//编译会报错;因为4.4默认是double类型;可以强制转换解决问题
       float f2=4.4f;//定义float型时要加f
       long d1=100;//默认转型:100将会由int转换为long类型
       long d2=100L;//定义long类型时加L
    
     
  ```
  
## 理解代码 i=i++
 

   ```

      int i=1;
      i=i++;
      System.out.println("i="+i)//i=1;
      
       分析:i=i++;
        1.首先在内存中定义一个临时变量temp存储i的值
          int temp=i;//temp=1;
        2.执行i++;
          i++;//i=2;
        3.再将临时变量temp值赋值给i
          i=temp;//i=1
        
        总结:是先存储i,再执行i++,最后执行赋值操作
      
        练习:i= i+++++i; //i=4;
       

   ```

##数据类型补充的小问题:
- 1: 在定义Long或者Float类型变量的时候,要加L或者f。
     整数默认是int类型,浮点数默认是double。
  
- 2   byte,short在定义的时候,他们接收的其实是一个int类型的值。
  这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。
  
    2:byte值的问题

        byte b1 = 127;
        byte b2 = (byte)128; //-128(从-128~127一直循环)128-127=1;即从第一个 -128 开始循环
        byte b3 = (byte)129; //-127
        byte b4 = (byte)130; //-126
    
        byte的范围:-128 ~ 127
    
        128:10000000
        -128:10000000 (这里的1即是符号位,也是数值位)
    
- 3:数据类型转换之默认转换
    byte,short,char -- int -- long -- float -- double
    
    long: 8个字节
    float:4个字节
    
    A:它们底层的存储结构不同。
    B:float表示的数据范围比long的范围要大
        long:2^63-1
        float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1

4:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
    
    可以。因为java语言中的字符占用两个字节。
    
    Java语言采用的是Unicode编码。
     
 

  

posted @ 2017-08-10 22:45  scwyfy  阅读(172)  评论(0编辑  收藏  举报