zoukankan      html  css  js  c++  java
  • Java 数据类型の理解

    1、数据类型分为内置类型和引用类型,等等基础概念,不再详细阐述,很多博客上面有进行介绍。

    2、Something  About Integer

    Java (JVM)中看到不带小数点的数(即整数),则默认将该值分为int 类型。若需存储足够大的整数,=> long number = 88888888L ;

    Q1:byte 所占为1 btye = 8 bit , 为毛其是范围:-2的7次方~2的7次方-1(1111,1111~0111,1111),即-128~127?

    A1:整数为带符号的数,最高位在0、1代码中表示符号位 (0正1负),余下7位来根据十进制=>二进制关系,来存放该数的绝对值。

    Q2:既然所有整数视为int ,为毛还需引入不同的数据类型?

    A2:例如,byte类型虽然在语义(逻辑)上是占用1字节,但实际上,JVM中是将其当做int的,也就是事实上是占用了32位,4字节的,所以其运算效率和int没区别,short也一样。

    之所以要有byte/short类型,一是因为某些地方要明确使用这些范围类型(个人理解为给人看的,而非给机器声明,因为机器为默认分配4 byte.)。二是,byte[]数组中,JVM存储的则是真的1字节,short[]2字节。(但也有的JVM其byte[]数组也是4字节1位)

    Q3:十进制、八进制、十六进制整数区别?

    A3:对于同一个数(10),三者(十进制:10,十六进制:A,八进制:12)在内存中都是0、1代码,只不过是根据其进制对应法则,展示的效果不同而已。默认int a= 10 ,是按十进制格式输入输出。也可以输出八进制 int a =012 (数字前面加0,表示八进制格式) 、十六进制 int b =0xA(对应数字前加0x 或者 0X,表示十六进制格式)。

    Q4:

    char b = 'a' + 18;   
    char a = 'a' ;    
    char b = a + 18;     

      

      前者语句不报错,后者语句报错:错误:不兼容的类型。为毛?

    A4:关于第一句 字符常量'a' 使用Unicode , 实际存储是转换为整数特定值来代表该字符,整数之间可以进行运算,将运算完的结果再转换为char 对应字符输出。(逻辑上可以这样理解)

      第一句的,其他理解是:javac在编译的时候就直接把 char b = 'a' + 18 编译成 char b = 's' 了 。   (p.s.两种理解方式,本人未学过汇编,具体机器执行过程不清楚,第二种更准确更深入。)

      关于第二句:a 是变量,jvm不知道具体的a是多少,所以进行算数运算的时候,会自动把char类型的'a'转为int类型的97,然后在进行算数运算,之后就需要强转为char了。

       若需解决第二局的错误,进行强制类型转换。

    char a = 'a' ;
    
    char b = (char)(a+18);
    

    3、 具体例子说明

    1)    long number = 0xfffffffffff;//0x表示这个数是16进制数,0表示8进制。
        //编译器报错,因为右边默认是int,但其超出了范围(没超出int范围的话
        //编译器会隐式将int转为long),故报错(同样的错误也会出现在float)。
     
    声明类型是获取内存中对应类型的字节,来存储输入数。若要解决问题,在等式右边最后加上L。显式提示为long类型。
     
    2)   short s = 123;//(这个123也是int类型,这里,= 操作编译器能隐式转换)
        s = s + 123;//编译器报错,那是因为s+123是int类型(编译器先将s转化为int,再+123),+ 运算符等算数运算符,遇到不同类型的会自动转换。
        //这里,+ 操作编译器不能隐式转换(会提示失真,即精度可能会受损)。正确的做法:
        s = (short)(s + 123)//注意,不是(short)s + 123。
  • 相关阅读:
    PAT (Advanced Level) 1114. Family Property (25)
    PAT (Advanced Level) 1113. Integer Set Partition (25)
    PAT (Advanced Level) 1112. Stucked Keyboard (20)
    PAT (Advanced Level) 1111. Online Map (30)
    PAT (Advanced Level) 1110. Complete Binary Tree (25)
    PAT (Advanced Level) 1109. Group Photo (25)
    PAT (Advanced Level) 1108. Finding Average (20)
    PAT (Advanced Level) 1107. Social Clusters (30)
    PAT (Advanced Level) 1106. Lowest Price in Supply Chain (25)
    PAT (Advanced Level) 1105. Spiral Matrix (25)
  • 原文地址:https://www.cnblogs.com/leafh/p/8590944.html
Copyright © 2011-2022 走看看