Java中的基本数据类型以及自增特性总结

Java中的数据类型:

 

  •  计算机中的数据的存储方式是二进制,并且相应数据类型的最高位为转换十进制数的符号位,1为负数,0为正数;
  • 浮点型数据的取值范围是根据IEEE754标准获得的;
  • 在Java中Float.MIN_VALUE表示的是浮点型数据的可表达的最小正数,Double.MIN_VALUE也是如此,所以在0~Float.MIN_VALUE的范围的数,float数值类型取不到; 一种解释是,通过 — Float.MAX_VALUE 就能获得单精度浮点型数据的最小值,所以采用Float.MIN_VALUE来表示更有意义的数值。
 Java中的基本数据类型转换:

分为两种: 自动类型转换、强制类型转换

  • 自动类型转换 
  1.    当小数转换为大数时,可以自动转换,例如:
byte a=126;
int b=a;  //此时byte类型的数据可以自动转换为int类型

        2.   大数、小数指的是这种数值类型所能表示的数值范围,并不是占用的字节数;

        3.   数值类型的大小数关系  (byte、char、short)<int<long<float<double;

       4.  byte、char、short三种数据类型是平级的,除了byte可以自动转化为short之外,其余两者转换需要强转;

       5.当short类型、byte类型、char类型的操作数进行运算操作时,会将其转化为int类型的数据进行运算,并生成int类型的数据,例如:

byte b=12;
    short c=b;
    char d='f';
 short e=b+c-d;//Type mismatch: cannot convert from int to short

   上述代码最后一行将编译错误,通过提示可知byte、short、char类型的数据进行数值操作时会先转化为int类型数值,然后进行运算,并且生成int类型的数据,但是不会改变原来的操作数的数值类型.

  •  强制类型转换
  1. 使用强制转换的格式,例如 long s=(long) 3.14F;

  2. 使用包装类进行转换 ,例如 int q=new Double(3.15).intValue();

  3. 使用包装类中的静态parseXXX方法,将字符串转换为相应的数据类型,例如 float a= Float.parseFloat("123");
  4. 将大数转换为小数时需要强制类型转换,这会由于大数占用的位数多,而小数占用的位数少导致溢出,溢出时会截断,不是取小数类型的最大值,例如大数是64位的long类型转换为int32位的小数,则会取63位中的低31位二进制数,最高位为符号位。

Java中的“++”自增

如下代码:

public class SelfAddTest {
static int x,y; 
public static void main(String args[]){
    x++;
    myMethod();
    System.out.println(x+y+ ++x);
}
private static void myMethod() {
    y=x++ + ++x;  
    
}
}

上述代码执行后控制台打印的是多少呢?   

  1. 首先要理解i++、++i区别,i++是先返回i值然后再执行+1操作,++i是先+1再返回i的值;
  2. 然后是理解 y=x++;
y=x++;  //可以分解为如下三步;
int temp=x;
x=x+1;
y=temp;

          3. 所以当执行   y=x++ + ++x时;相当于在操作栈中先存入1,然后执行+1,此时x=2;然后执行++x;此时x=3并将3压入操作栈;所以y=1+3;

         4.  所以控制太输出的结果是11;

         5. 然后是++x的操作可以分解为:

//y=++x 等效于:
x=x+1;
int temp=x;
y=temp;

理解了上述++i和i++的区别也就容易得到如下代码的输出了:  

int i=0;
i=i++;
i=++i;
System.out.println(i);  //1

"i++"、 "i+=1"和"i=i+1"的区别

  • "i++"、 "i+=1"都隐含强制类型转换;
  • i=i+1 没有强制类型转换,因为其中的1是默认的int类型,如果i是小数,例如 byte类型,则该代码将编译错误。
原文地址:https://www.cnblogs.com/zwwang/p/14896981.html