深入理解Java字面量与数据类型转换

一、常用字面量默认的数据类型

        Java是强类型语言,任何在程序中直接写出来的字面量都有确定的类型。

如:10 默认为int整型字面量

        90.5 默认为double浮点型字面量

         ''  默认为char字符型字面量

        "" 字符串默认为String类的对象

二、给long、float型变量赋值时的字面量

定义long类型变量并赋值时需给字面量加上L(l) ,也可以不加。

   如:long a = 10L(l);  或  long a = 10;

定义float类型变量并赋值时必须给字面量加上F(f) 。

   如:float a = 10.0F(f);

1. 定义long型变量并赋值时,右侧字面量加L(l)和不加L(l)的区别

    加了L(l)   long a = 10L(l);   10才为long型字面量 

    未加L(l)    long a = 10;    10默认为int型字面量,但可能编译不通过

 具体分析:

 1)不加L(l) —— 默认为int型字面量,取值在int型范围内

     a. 若未超出int型的取值范围,则编译通过,实际上隐含了 int -> long 的类型转换(小类型到大类型的自动提升)

     b. 若超出了int型的取值范围,则编译不通过

  2)加L(l) —— 为long型字面量,取值在long型范围内

2. 定义float型变量并赋值时,右侧字面量必须加F(f),否则编译不通过

    加了F(f)   float a = 10.0F(f);   10.0才为float型字面量 

    未加F(f)   float a = 10;    10默认为double型字面量,编译不通过

三、数据类型转换中的几个要点

1. 对于基本数据类型之间的转换,可根据所占字节数来判断是相对大类型/小类型

    如:8字节的double型较4字节的int型大,4字节的int型较2字节的char大

2. 大类型和小类型之间的相互转换【针对基本数据类型】

 1)大类型转换为小类型:一般都需要手动进行强制类型转换

       但可能发生溢出 / 丢失精度。

       如:long -> int 可能发生数据过大导致的溢出(int型放不下)

               double -> int 可能发生小数点后多位精度丢失

        

    特例:

     对基本数据类型使用增量运算符 ( +=  *=  /=  %= ) 时,若涉及大类型转换为小类型,会自动进行强制类型转换,无需手动强转。

 2)小类型转换为大类型:数据类型自动提升,无需强转

   但若小类型的数据已经溢出,则再存储到大类型中时,即使装得下,也显示为溢出。

3. int与byte之间的类型转换

1)byte -> int :小类型转换为大类型,数据类型自动提升

2)int型变量给byte型变量赋值:大类型转换为小类型,需进行强制类型转换

      

3)int型字面量给byte型赋值: 不一定要进行强制类型转换

      分两种情况:

      a. 原int值未超byte取值范围  ==> 无需强转

      b. 原int值已超byte取值范围  ==> 需强转

注意:实际上在计算机底层,byte型仍以4字节的int型存储

小于4字节的数值型和字符型数据 (byte、short、char),计算机底层在存储时会转换为4字节

CPU在读写内存数据时,都是以4字节为单位的。

4. 数学运算中的类型转换

1)小类型和大类型进行数学运算时,小类型会自动提升为大类型后再执行运算

2)若执行数学运算的两个数据类型同为byte型,但由于byte型实际上是以int型存储的,故运算结果也为int型而非byte型,需进行强制类型转换

5. final关键字不允许进行数据类型转换        

    被final关键字修饰的变量即成为常量,不仅值不能改变,数据类型也不可以改变

    则计算机底层也不会将小于4字节的数据转为4字节类型存储

        

    下题只有选项A正确,其他都编译不通过。

        

6. int与char之间的类型转换

    int型和char型看似毫不相干,但由于计算机内部都是以0/1机器码存储数据的,故不论int还是char型数据,都会根据Unicode格式转为数字0/1,故int和char也可以进行类型转换。

   二者均为基本数据类型,转换方式同2。int (4字节) 为相对大类型,char (2字节) 为相对小类型。

补充知识:

Java默认的字符集是Unicode统一编码,支持地球上的所有语言。

byte字节类型:占1个字节,[-128 ~127](一般用于文件和网络传输中)

short短整型:占2个字节(基本用不到)

int整型:占4个字节,最大值约为21亿

long长整型:占8个字节

char字符型:无论中/英文,均占2个字节

float单精度浮点型:占4个字节,小数点后6位是有效数字

double双精度浮点型:占8个字节,小数点后12位是有效数字

boolean布尔型:占用的字节数不定,与JVM的版本有关,true和false与0和1无关,boolean类型不能与其他基本数据类型进行转换

7. int型与String之间的类型转换

    不再为两个基本数据类型之间的转换,不按照2的方式进行转换。

1)int -> String 的两种方式:

      a. 调用String类的静态方法valueOf(int i)

      b. 使用“ + ”连接符进行拼接

                

" + "拼接操作:

 1)从出现字符串的位置开始向后连接所有字符串,后方的所有任意数据类型都会被转换为字符串。

 2)在字符串" "出现之前,若有算术运算则照常执行算术运算。

 3)若希望在字符串" "出现之后仍然执行算术运算,可使用 () 括号。                         ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​

 2) String -> int:调用int包装类Integer的静态方法parseInt(String s),但仅限于数字字符串

     

8. boolean不能与其他基本数据类型进行转换,但可以和引用数据类型String转换

1)boolean -> String的两种方式:

       a. 调用String类的静态方法valueOf(boolean b)

       b. 使用“ + ”连接符进行拼接

        ​​​

  2)String -> Boolean:调用boolean包装类Boolean的静态方法valueOf(String s)

        ​​​​​​​        ​​​​​​​

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是Java基本数据类型的课件内容: ## Java基本数据类型 Java中的数据类型分为两类:基本数据类型和引用数据类型。 ### 基本数据类型 Java中的基本数据类型有8种,分别是: - byte:1字节,取值范围为-128~127 - short:2字节,取值范围为-32768~32767 - int:4字节,取值范围为-2147483648~2147483647 - long:8字节,取值范围为-9223372036854775808~9223372036854775807 - float:4字节,取值范围为1.4E-45~3.4028235E38 - double:8字节,取值范围为4.9E-324~1.7976931348623157E308 - char:2字节,取值范围为0~65535 - boolean:1位,取值范围为true或false ### 引用数据类型 Java中的引用数据类型包括类、接口、数组等。 ## 基本数据类型的使用 在Java中,可以使用变量来存储基本数据类型的值。变量的声明格式为: ``` 数据类型 变量名 = 初始值; ``` 例如,声明一个整型变量并赋初值为10: ```java int num = 10; ``` 在Java中,还可以使用字面量来表示基本数据类型的值。例如,整型字面量可以表示为: ```java int num1 = 10; // 十进制 int num2 = 0b1010; // 二进制 int num3 = 012; // 八进制 int num4 = 0xA; // 十六进制 ``` 其中,0b表示二进制,0表示八进制,0x表示十六进制。 ## 类型转换Java中,不同类型的数据之间可以进行转换。类型转换分为自动类型转换和强制类型转换。 ### 自动类型转换数据类型从小范围向大范围转换时,Java会自动进行类型转换。例如,将一个整型值赋给一个浮点型变量时,Java会自动将整型值转换为浮点型。 ```java int num = 10; float f = num; // 自动类型转换 ``` ### 强制类型转换数据类型从大范围向小范围转换时,Java需要进行强制类型转换。强制类型转换需要使用括号将目标类型括起来,并放在需要转换的变量前面。 ```java float f = 10.5f; int num = (int)f; // 强制类型转换 ``` 需要注意的是,强制类型转换可能会导致精度丢失或溢出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值