IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 02_星仔带你学Java之变量、常量、字面量、数据类型 -> 正文阅读

[Java知识库]02_星仔带你学Java之变量、常量、字面量、数据类型

?资料和代码存放地址:《华星详谈-学习中心》。开源项目持续更新中。

? ? 大家好,我是星仔。本博客收录于华星详谈-学习中心。本学习中心收集了Java整个技术体系的所有技术要点。每篇博客后面都附带有面试题,提供给大家巩固本章内容。
? ? 为各位同胞们能够系统性的掌握整个Java技术体系而建立的学习中心。星仔正在努力的更新学习中心中的内容。望诸君共勉!!!

GitHub - 17666555910/HuaXing-learningCenter: 华星详谈-学习中心。收集了Java目前市面上主要流行的技术细节以及对应的实现华星详谈-学习中心。收集了Java目前市面上主要流行的技术细节以及对应的实现. Contribute to 17666555910/HuaXing-learningCenter development by creating an account on GitHub.https://github.com/17666555910/HuaXing-learningCenter

目录

一、字面量、常量、变量以及表达式

1、字面量

2、常量

3、变量

4、表达式

二、数据类型

1、数据类型概念

2、基本数据类型

3、引用数据类型

三、基本数据类型转换

自动类型转换,也称为“隐式类型转换

强制类型转换,也称为“显示类型转换”

表达式类型的自动提升

四、面试题

1、以下变量定义哪个是错误的

2、假设有a b两个整形变量,交换他们的值,可以用下列代码中的:

3、以下变量定义,哪个是错误的

4、下面哪个常量定义是错的?

5、下面选项中,输出为 100 的是

6、System.out.println('a' + 1); 这个语句输出的是多少?

7、以下代码的编译结果最终是多少?

8、byte a = 125 是否会编译报错。并请说明原因。

9、判断以下表达式的结果类型:


一、字面量、常量、变量以及表达式

1、字面量

1.1 字面量概念

我们平常说的字面量其实就是等价于字面值。字面量的官方定义:给基本类型变量赋值的方式就叫做字面量或者字面值。如Float f=120;、Int armor=10;等

解释:创建一个对象会用到new关键字,但是给一个基本数据类型变量赋值是不需要new关键字,基本类型的变量在java中是一种特别的内置数据类型,并非某个对象。

1.2 整数类型字面量

整数字面量可以用四种类型来表示,如二进制、八进制、十进制、十六进制

long val = 26L;//以L结尾代表long型
int decVal = 26;//默认常数就是int
int hexVal = 0x32;//16进制--十进制50
int oxVal = 032;//8进制--十进制26
int binVal = 0b1101011;//二进制写法--十进制107

1.3 浮点类型字面量

float f1 = 1234.1F;//以F结尾的字面量表示浮点型
double d1 = 123.3;
double d2 = 1.2e2;//科学计数法  1.2e2--120--en  10^n

1.4 字符和字符串类型字面量

String name = "华星详谈";
char a = '星';
//以下是转义字符
char tab = '\t';
char enter = '\r';//回车
char newline = '\n';//换行
char doubleq = '\"';//双引号
char singleq = '\'';//字符类型单引号
char backslash = '\\';

2、常量

常量:程序中固定不变化。Java规范中常量的字段名称一般为全大写。

常量分类:

  • 字面值常量:? 比如:整数常量1,2,3,小数常量3.14,布尔常量false,true等。
  • 定义的final变量:?比如代码: public static final String TITLE = "华星详谈";

3、变量

变量的定义

表示一个存储空间。可用来存放某一类型的常量,变量没有固定值,并可以重复使用,也可以用来存储某种类型的未知数据。

变量在我们平常生活中也很常见,比如车牌、岗位、房间号等可以变化的内容。

变量的特点

① 占据着内存中的某一块存储区域

② 该区域有自己的名称(变量名)和类型(数据类型);

③ 可以被重复使用;

④ 该区域的数据可以在同一类型范围内不断变化;

Java代码中变量的定义

方式一:先定义变量,再赋值

? 步骤一:定义数据类型? 变量名 ps:int a;

? 步骤二:变量名 = 值; a = 1;

方式二在声明时同时赋值(推荐使用

? ????????数据类型? 变量名? =? 初始化值;

eg: ????????int ????????a????????= ????????1;

注:格式是固定的,记住格式,以不变应万变。不推荐同时定义多个变量。

变量的分类、作用域、使用规则:

变量的分类

随着变量定义在类中的位置不同,故把变量分成两大类

? 成员变量:直接定义在类里的变量,又称为全局变量或字段。

? 局部变量:变量除了成员变量之外,其他就是局部变量。根据定义的位置不同有3种表现形式:方法形参,方法内变量,代码块变量。

变量作用域

指变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就确定了:

作用域是定义开始到定义所在的花括号结束;

变量使用规则:

1.变量必须先声明,并且初始化后才能使用;

2.声明变量必须有数据类型

3.同一作用域内变量名不能重复定义,可重复赋值;

4、表达式

表达式(expression):是由数字、运算符、数字分组符号(括号)、常量、变量等以能求得结果的有意义排列的组合。

用运算符号连接的变量/常量可称为表达式。那么也就是说表达式是由常量、变量、运算符、括号组成能求得值的有意义结果的语句。

如:

a + b
3.14 + a
(x + y) * z + 100

注意:

表达式中操作数进行运算得到的最终结果就是表达式的结果。

表达式的运算顺序大多和数学一样,可以参照接下来说的运算符操作优先级。

二、数据类型

1、数据类型概念

Java中的数据类型分为基本类型引用类型两种,其中基本数据类型包括数值型(byte、short、int、long、float、double);字符型(char);布尔型(boolean)。引用类型包括类、接口、数组。

如下图所示:

?

2、基本数据类型

Java中基本数据类型共分为八类,即byte、short、int、long、float、double、char、boolean。

其数据范围、占位、默认值如下:

类型

概述

范围

默认值

作用

例子

byte

8位、有符号,以二进制补码表示的整数

-2^7 ~ (2^7-1),即 -128 ~ 127

0

byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int的四分之一;

例子:byte a=-2

short

16位,有符号,以二进制补码表示的整数

-2^15 ~ 2^15-1, 即 -32768 ~ 32767

0

short占用空间是int的二分之一

例子:short s=-20000

int

32位、有符号,以二进制补码表示的整数

-2^31 ~ 2^31-1

0

一般整数型默认为int类型;

例子:int=-200000

long

64位、有符号,以二进制补码表示的整数

-2^63 ~ 2^63-1

0L

主要使用在需要比较大整数的系统上

例子:long a=10000L

float

32位、单精度,浮点数

浮点数不能用于表示精确的值

0.0f

在存储大型浮点数组的时候可以节省内存空间

例子:float f1=0.3f

double

64位、双精度,浮点数

double也不能表示精确的值

0.0d

浮点数的默认类型为double类型

例子:double d1=12.3

boolean

表示一位的信息

取值:true/false

false

只作为一种标志类记录 true/false 情况

例子:boolean one=true

char

是一个单一的16位Unicode字符

\u0000(即0)~\uffff(65,535)

'\u0000'

char可以存储任何字符

例子:char letter='A'

注意:byte、short、int、long唯一的不同就是存储空间的容量大小不一样。我们平常在使用时根据具体需要存储的数据去选择合适的数据类型即可。当然,一般来说我们使用int即可。

整数类型(byte-short-int-long)

byte、short、int、long类型都是属于整数类型。

整型常量的四种表示形式:

① 二进制整数:0B或0b开头(Java7的新特性),如:int a = 0B110;

② 八进制整数:要求以0开头,如 int a = 012;

③ 十进制整数:如:int a = 17;

④ 十六进制整数:要求0X或0x开头,如int a = 0x12;

Java语言的整型常量默认是int型,声明long型变量后加上‘l’或‘L,因小写的l容易和数字1相混淆,建议使用大写L。

默认情况下,一个整型的字面量默认是int类型。

小数类型(float-double)

float、double类型:表示小数类型又称为浮点类型其中float表示单精度类型,double表示双精度类型,但是二者都不能表示精确的小数

Java的浮点类型常量有两种表现形式:

  • 十进制形式: 例如:3.14 ,168.0, .618
  • 科学计数法形式: 例如:3.14e2, 3.14E2, 1000E-2

科学计数法表达式返回的结果是double类型。

默认情况下,一个浮点类型的字面量默认是double类型.若要声明一个常量为float型,则需在常量后加上f或 F,double常量后面的D或d可省略

注意:

  • Java里只有浮点型的变量才可以接受科学计算式结果:
  • 因为float和double都不能精确的表示小数,那么在精度要求高的系统比如银行系统里,那怎么表示精确的小数呢?后面我们会讲BigDecimal类型,它表示任意精度的数据。

字符类型(char)

字符,字母和符号

char类型:表示16位的无符号整数或者Unicode字符,Java对字符采用Unicode字符编码。Unicode收集了世界上所有语言文字中的符号,是一种跨平台的编码方式。Java的字符占两个字节,可以表示一个汉字。

什么是编码?

计算机只能表示0和1两个数,于是人们做规定使用一个数字去表示一个特定的字符,比如a使用97表示。char前256个字符和ASCII(美国信息交互标准编码)码中的字符重复

char常量有3种表示形式:

① 直接使用单个字符来指定字符常量,格式如'◆'、'A','7';

② 直接作为十进制整数数值使用,但是数据范围在[0,65535],格式如97,但是打印出来的值依然是ASCII码表对于的符号,如97打印出来是字符a。

③ 和2一样,只不过表示的是16进制的数值,格式如'\uX',X表示16进制整数;如:97的16进制是61。那么表示为‘\u0061’打印出来也是a。

所以有人说char本质上也是整型,也是有道理的。

char前256个字符和ASCII(美国信息交互标准编码)码中的字符重复,可查表。

?

boolean类型

通常用于逻辑运算和程序流程控制(条件选择/循环)该类型的值只能是true 或 false,表示真或假。

不可以使用0或非0的整数来代替false和true,主要是用于区分于C语言。(其实在JVM中对boolean的处理也是用0表示false,非0表示true的。)

false和true是boolean的常量。

3、引用数据类型

除了8种基本数据类型,其他所有类型都是引用数据类型,包括类、接口、数组。引用数据类型默认初始值都是null。

  • 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时候被指定为一个特定的类型,声明之后不能改变。
  • 引用数据类型包括:类(对象)、接口、数组。
  • 所有引用类型默认值都是null。
  • 一个引用变量可以用于引用任何与之兼容的类型。

最常用的引用类型String类型

String是一个类表示字符串(后面详讲),所谓字符串,就是一串字符,也就是N个字符连接在一起(N可以表示0或多个),好比羊肉串

字符串都得使用 "" 括起来的,连接字符串使用 “+”符号。

字符串拼接:字符串和任意数据类型相连接,结果都是字符串类型。

String str2 = (String)17 + "ABC";//编译错误: 不可转换的类型。因为基本类型不能够直接强转为引用类型String。

三、基本数据类型转换

在8大基本数据类型中,boolean不属于数值类型,不参与转换一般的byte、short、char不需要我们参与转换操作,我们直接把byte、short、char直接付给int类型。其底层会通过隐式转换进行数据类型的转换。

转换规则其实就是各自数据类型的空间大小。如图所示

?

我们可以把不同的数据类型看出是不同容量的容器

byte是1个字节,最多只能装1斤水.

short是2个字节,最多只能装2斤水.

代码演示如下:

自动类型转换,也称为“隐式类型转换

当把小数据范围类型的数值或变量赋给另一个大数据范围类型变量,系统可以完成自动类型转型。这好比把装一斤水容器里的水倒进可以装两斤水的容器里一样

再次强调:boolean 类型是不可以转换为其他数据类型。

强制类型转换,也称为“显示类型转换”

当把大范围类型的数值或变量赋给另一个小范围类型变量时,此时系统不能自动完成转换,需要加上强制转换符,但这样的操作可能造成数据精度的降低或溢出,所以使用时要格外注意。

这就好比把装两斤水容器里的水倒在可以装一斤水的容器里,是可能造成水溢出的。

注意:String和任意数据使用 + 连接起来,结果都是String(字符串)。

表达式类型的自动提升

当一个算术表达式中包含多个基本数据类型(boolean除外)的值时,整个算术表达式的数据类型将在数据运算时出现类型自动提升,

其规则是:

  • 所有的byte、short、char类型被自动提升到int类型;
  • 整个表达式的最终结果类型被提升到表达式中类型最高的类型;

我们可以一起来看下面的这个例子

? double d1 = 123 + 1.1F + 99L + 3.14;

?

四、面试题

1、以下变量定义哪个是错误的

A:x = new Int(100)

B:var x = 3.14;

C:String line = "一个字符串变量";

D:float x;

答案:A

解释说明:很多小伙伴们第一眼会选择答案B,其实在jdk10中,var x = 3.14 是支持的。在jdk10中,var表示模糊定义。

而A选项,Java中,并没有Int这个类型,有的只有基本类型int,并且int也是不能够通过new出来的。只有引用类型才能够通过new关键字创建。

2、假设有a b两个整形变量,交换他们的值,可以用下列代码中的:

A:

tmp = a;
a = b;
b = tmp;

B:

int* tmp = &a;
a = b;
b = tmp;

C:

auto tmp = a;
a = b;
b = tmp;

D

int tmp = a;
a = b;
b = tmp;

答案:D

解释说明:A选项tmp变量没有定义类型;B选项Java中没有int*这个数据类型;C选项同理Java中也没有auto这个类型。故答案选择D

3、以下变量定义,哪个是错误的

A:string x = "1";

B:boolean flag = true;

C:String name = "csdn";

D:String x;

答案:A

题目要求选择的是错的。A 选项中string x = 1; Java中引用类型有个String类型,S是大写的。Java中没有string这种数据类型。

4、下面哪个常量定义是错的?

A:final int value = 100;

B:public static final int value = 100;

C:public final int value = 100;

D:const int value = 100;

答案:D

解释说明:Java的数据类型中没有const这个类型,故const int value =10是错误的

5、下面选项中,输出为 100 的是

A:

public class Square {
    private int x = 10;
}

// 放置在任何可运行的地方
System.out.println(x*x)

B:

public void process() {
    int x 100;
}
process()
System.out.println(x);

C:

public class Square {
    private int x = 10;
    public int area() {
        return x * x;
    }
}
// 放置在任何可运行的地方
System.out.println(new Square().area())

D:

int x = 10;
x = x * 2;
System.out.println(x*x)

答案:C

解释说明:选项A中x变量是成员变量,x的作用域是在本类中;选项B直接编译报错;选项D中x变量的结果为400;选项C中通过new Square().area()拿到了x的值,并且x*x=100故选择C

6、System.out.println('a' + 1); 这个语句输出的是多少?

答案:输出98

解释说明:

该问题很多小伙伴们会一不小心把这个语句的输出结果看成a+1,但是要注意'a'表示的是一个字符类型(char),从ASCII字符代码表中可以看出字符(a)表示十进制中的97。即最终的表达式为“97+1”,最终输出的结果为98.

7、以下代码的编译结果最终是多少?

 byte b = 22;
 b = b + 11;

答案:会编译出错

解释说明:在上文中星仔在讲表达式类型自动提升环节是有提到过,在表达式中,所有的byte、short、char类型被自动提升到int类型。

在b+11表达式中,byte类型的b已经被自动提升到了int类型。最后是两个int类型做加法。

故结果类型应该是int。

8、byte a = 125 是否会编译报错。并请说明原因。

这是符合强转类型转换条件的,可为什么没转呢?

答案:不会报错。

原因:整数常量默认是int型。当把一个int类型常量直接赋值byte类型变量,其底层也就是在编译器中发现125在byte的取值范围之内,则直接进行隐式转化了。此时不需要我们进行强制转换。故byte a = 125;不会编译报错。

9、判断以下表达式的结果类型:

short s  = 10;
byte a = 2;
int  i = 5;
float f = 10.0F;
double d = 35.0;
(s / a) -(f / s) - (d + i);

答案:(s / a) -(f / s) - (d + i) 表达式最后的结果类型为double。

解释说明:基于表达式自动提升数据类型的规则,byte、short会被自动提升为int类型。浮点类型float和double相比,double的精度更高。而double和int相比,double的类型比int高。故最终的结果类型为double。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:17:51  更:2022-03-10 22:17:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:31:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码