Java基础中的这几个细节你知道几个?

简介: 既然5默认是一个整型,而i也是一个整型,那究竟是为什么只有上面的代码报错而下面的代码却没有报错呢?原因其实是:java编译器在编译时能够读取一个常量的值,而却不能读取一个变量的值。

image.png


1 数据类型转换相关细节:


  1. 凡是byte short char类型的数据在运算过程中都会自动转化成int类型的数据进行运算。 如:byte a = 1; byte b = 2; byte c = a+b; 会报错 如:System.out.println('a'+1);输出结果为98
  2. 两个不同数据类型的数据运算时,结果的数据类型取决于大的那个数据的类型。 如:int a = 1; long b = 2L; int sum = a + b;也会报错。 如:System.out.println('a'+1);输出结果为98
  3. byte b = 3;b += 2; 此处 b += 2; 等于 b = b + 2;但是在此处却不会报错,因为该复合运算底层有一个强制类型转换(b++;也不会报错的原因也是底层有一个强制类型转换)


2 一个整数在默认情况下为整型,但看到下面几句代码,是否会有一些疑问呢?


int i = 5; byte b = i;编译时会出现报错的情况,


但 byte b = 5; 编译时却没有问题。


既然5默认是一个整型,而i也是一个整型,那究竟是为什么只有上面的代码报错而下面的代码却没有报错呢?原因其实是:java编译器在编译时能够读取一个常量的值,而却不能读取一个变量的值。在byte b = 5;这里5是一个常量,编译器能够读取到其值,检测到其值能够被byte类型存下是则能通过编译,而byte b = i;时此时i是一个变量,编译器只能检测到它是一个int类型的值而不会知道值具体是多少(在这我们还应知道变量在编译时其实是不会开辟内存空间的,只有在java虚拟机运行到该语句时才会开辟内存空间存储那个值),就会在编译时报错显示精度可能会丢失。


3 算术运算符中要注意的例子:


int i = 0;i = i++; System.out.println(i);输出结果为0。


要知道此题答案需要知道jvm虚拟机的后自增原理。i++;这一句在jvm虚拟机中会先创建一个临时变量,int temp = i; 然后再i = i +1;最后如果有赋值语句时再把temp给出去这里则是 i = temp; 虽然这波操作看起来有点奇怪,但是其实这才符合算术运算符的优先顺序,而以往刚开始学习说的先使用后++反而有点问题,因为++的优先级是高于=的,如果按大多数的地方理解后++就是先使用后++的话 这里就不太符合优先级了。


同理,后置--也会有同样的现象。    


4 复合赋值运算符需注意:


byte b = 1; b = b+1;则会报错 而 byte b = 1; b += 1;则是不会报错的,因为java编译器会自动强制类型转换


其他复合赋值运算符也有相同现象。


5 复合赋值运算符需注意:


byte b = 1; b = b+1;则会报错 而 byte b = 1; b += 1;则是不会报错的,因为java编译器会自动强制类型转换


其他复合赋值运算符也有相同现象。

目录
相关文章
|
Java 程序员 编译器
java之七 高级类设计
java之七 高级类设计
65 0
WK
|
2月前
|
安全 Java 编译器
C++和Java哪个更好用
C++和Java各具优势,选择取决于项目需求、开发者偏好及目标平台特性。C++性能出色,适合游戏、实时系统等;Java平台独立性强,适合跨平台、安全敏感应用。C++提供硬件访问和灵活编程范式,Java有自动内存管理和丰富库支持。两者各有千秋,需根据具体需求选择。
WK
48 1
|
8月前
|
Java C语言
JAVA基础(三大特性)
JAVA基础(三大特性)
56 1
|
8月前
|
Java C语言
Java中的数组,你知道多少细节?
Java中的数组,你知道多少细节?
58 1
|
Java
Java 中的抽象简介
Java 中的抽象简介
47 0
|
存储 算法 Java
Java之六 类设计
Java之六 类设计
42 0
|
Java C语言
Java基础篇(简单语法的一些细节介绍)
Java基础篇(简单语法的一些细节介绍)
73 0
Java基础篇(简单语法的一些细节介绍)
|
Java 编译器
Java中最基础的概念(了解一下
Java中最基础的概念(了解一下
|
存储 Java
Java基础学习——方法
赋值调用的好处是当程序复杂时,若想调用某个方法的结果,就可以直接用一个变量来代替,便于代码的编写。同样,在将方法的结果赋值给变量后,不打印输出该变量,控制台输出也为空
131 0
Java基础学习——方法
|
Java 关系型数据库
Java重点 | 接口
本文主要详细的介绍了Java中的接口,并且通过大量的举例,代码实战,带你深入浅出的理解接口。
105 0
Java重点 | 接口