Java基础-数据类型

简介: 本篇介绍了 java的数据类型,包括基本类型及其相关的类型转换,以及了解一些常用的引用类型如类、数组、接口。

这次来谈一下java的数据类型,包括基本类型及其相关的类型转换,以及了解一些常用的引用类型如类、数组等,大致内容如下导图所示。
数据类型.png

一、基本类型

1、数值型

1)整数类型:byte,short,int,long

int i = 10; // 整数常量默认是 int 类型
long l = 10L; // long 类型常量需在整数后添加 l 或 L
long l1 = i; // 小转大,自动类型转换
short l2= (short) i; // 大转小,强制类型转换

2)小数类型:float,double

double pi = 3.14;  // 浮点数常量默认是 double 类型
float  pi = 3.14F; // float 类型常量需在浮点数后添加 f 或 F 后缀
float  pi = 3.14; // 错误: 不兼容的类型: 从 double 转换到 float 可能会有损失
3.14 == 3.14F; // false
3.14 == 3.14D; // true
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
a == b; // false

注意:

1 浮点数采用“尾数+阶码”的编码方式,所以 float, double 都不能表示精确的浮点数,需用 BigDecimal 类型。
2 涉及到类型转换的问题需要特别注意。

补充(进制):
二进制:以 0B 或 0b 开头,0B011
八进制:以 0 开头,如011
十六进制:以 0X 或 0x 开头,如0XFF

int a = 0B011; // 二进制:011 值为 3
int b = 011; // 八进制:011 值为 1*8^0+1*8^1=9
int c = 0XFF; // 十六进制:FF(二进制即1111 1111)值为255

进制.png

2、字符型(char)

可能会有人把字符型和String类型(字符串)搞混,但两个不是一回事。

  • char 类型表示的是一个16 位 Unicode 字符,最小值是 \u0000(十进制为 0);最大值是 \uffff(65535),
  • 而字符串类型(String)是引用类型,下面会提及。

    最简单的区分方式:单引号(' ')为字符型,双引号(" ")为String类型。

表示形式如下:

char c1 = 'A'; // 使用单个字符
char c2 = 65; // 使用十进制的整数(Unicode 值),[0, 65535]
char c3 = '\u0061'; // 使用十六进制的整数,格式'\uXXXX',('\u0000'~'\u00FF')

char.png

注:常用字符的 unicode
1)a~z: a为97,b为98,...其余以此类推(z为97+25=122)
2)A~Z:A为65,B为66,...其余以此类推(Z为65+25=90)

3、布尔型(boolean)

只有两种结果 true或false,默认值为 false。

回忆->关系运算符:==,!=,>,<,>=,<= (用于布尔运算,结果未 true或 false)

4、占位及数据范围

下表为各数据类型的占位及其范围:
数据范围.png

pass:
1)占位一定要非常熟悉,而数据范围对于前四个整型的要知道。 float和double只要知道表示范围非常大即可,一般都够用了。
2)E为科学计数法,表示10的多少次方。

学有余力的同学可以看看下面的分析,因为涉及一些计算机组成原理的内容,没学过计组的同学可以忽略。

简单分析上表:先看前4个整数类型和char,区别在于整数可以有正负,而char没有负数。这就涉及二进制整数的表示问题。有正负则用带符号整数表示,否则就用无符号整数表示,先记住以下两条结论:
1)n位的无符号整数的表示范围为 [0,(2^n)-1],刚好符合 char的范围表示
2)n位的带符号整数的表示范围为 [-2^(n-1),(2^(n-1))-1],符合上面4个整数类型的范围表示

具体分析如下图:
整数表示.png

注:
1)1byte=8bit,即 1个字节(1B)占 8位(b)
2)float和double范围的推算涉及计算机组成原理中浮点数的表示和运算,是个难点,包括符号、阶码和尾数之间的转换与表示,有兴趣的同学可以去了解一下。

5、类型转换

5.1 自动类型转换(隐式类型转换)

转换前的数据类型的位数要低于转换后的数据类型(小转大为自动)。如32位(4字节)的 int类型可以自动转换为64位(8字节)的double类型

// 小 -> 大(低位 -> 高位)
byte -> short -> char -> int -> long -> float -> double

eg:

int a=10;
double b=a;  //自动转换,int到double,得 b的值为 10.0

5.2 强制类型转换(显示类型转换)

转换前的数据类型的位数高于转换后的数据类型(大转小为强转)。如64位(8字节)的 double类型转换为32位(4字节)的 int类型时,自动类型转换无法进行,需要进行强制类型转换。 格式:(targetType)value。eg:

byte b = 10; // 系统会自动把整型10当成 byte类型处理
int a = 12;
byte b = (byte) a; // 强制类型转换(原理同上)
float a = (float) 5.6; // 浮点数常量默认是 double类型,强制类型转换
char c= (char) 65 // 表示 'A' 字符
int i = (int) -12.81; // 强制类型转换(小数部分被截掉),i = -12

这里想重点提一下,强制类型转换过程可能造成溢出或损失精度。eg:

public class TypeConversion {
    // 类型转换
    public static void main(String[] args) {
   
        int i = 128;
        byte b = (byte)i;   //强转
        System.out.println(b);
    }
}

输出b的值为 -128,这是因为 byte 表示的数据范围最大为127(不理解的回见 4、占位及数据范围部分),所以当 int强制转换为 byte 类型时,值 128 就会导致溢出。
强转溢出1.png
强转溢出2.png

5.3 其他(了解)

1)隐含强转

整数的默认类型是 int。
小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。

2)表达式的自动提升(了解)

所有的 byte、short、char 类型被自动提升到 int 类型。
整个算术表达式最终结果的数据类型被提升到表达式中操作数类型最高的类型。

short s = 5; // 自动类型转换(int转short,大转小)
s = s - 2;

输出s提示错误: "不兼容的类型: 从int转换到short可能会有损失"。
表达式的自动提升.png

二、引用类型

引用类型,是指除了基本的变量类型之外的所有类型。所有引用类型的默认值都是null

pass:该部分除数组外,类和接口都是之后面向对象部分的内容。这里可以先了解,后面会重点介绍。

1、类(Class)

简单介绍几个常用的类。

1.1 Object类

Object 是 Java 类库中的一个特殊类,也是所有类的父类,任何 Java 对象都可以调用 Object 类的方法。Java 允许把任何类型的对象赋给 Object 类型的变量。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类(向上和向下转型问题,后面会介绍)。

1.2 String类(最常用的引用类型 String)

两个要点如下:

  • String 是最终类、不可变类,即字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。
  • String对象一旦被创建就固定不变了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。

2、接口(interface)

1)接口是一个抽象类型,是抽象方法的集合。
2)几点注意:

  • 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
  • 接口没有构造方法,不能包含成员变量,除static 和 final 变量。
  • 接口支持多继承。(Java类是单继承)

pass:重点,面试可能会问,特别是第三点。

3、数组

1)声明

int[] arr; // 数组元素类型[] 数组名;

2)创建

// 静态初始化
int[] arr = {1, 2, 3};
// 动态初始化,系统自动为数组元素分配初始值
int[] arr = new int[3]; // [0, 0, 0]

3)几点注意:

  • 数组是定长的:一旦初始化完成,数组的长度就固定了,不能更改
  • 数组是引用数据类型,可以赋值为 null,表示没有引用任何内存空间。
目录
相关文章
|
12天前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
52 12
|
7月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
106 13
|
2月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
3月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
136 0
|
7月前
|
Java C语言 C++
课时9:Java数据类型划分(数据类型划分)
课时9介绍了Java的数据类型划分及其操作。Java数据类型分为基本数据类型和引用数据类型。基本数据类型包括八种:数值型(整形、浮点型)、字符型和布尔型;引用数据类型有数组、类和接口。重点讲解了每种数据类型的默认值、适用场景及选择原则,如整数用int,小数用double,日期时间用Long等。掌握这些内容对编程至关重要。
126 4
课时9:Java数据类型划分(数据类型划分)
|
7月前
|
Java
课时12:Java数据类型划分(字符型)
课时12介绍了Java中的字符型数据(char),包括字符的定义、与int类型的转换及应用。通过范例展示了如何观察字符、编码转换、大小写字母互转、保存中文字符,以及Java中字符处理的灵活性。字符型使用单引号声明,可与int互相转换,支持Unicode编码,能表示任何文字,包括中文。虽然实际开发中直接操作字符型的情况不多,但理解其特性有助于更好地编程。
114 17
|
7月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
191 15
|
7月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
158 9
|
7月前
|
Java
课时13:Java数据类型划分(布尔型)
观察布尔型的操作。布尔是一位数学家的名字,这个布尔发明了两个单词:True、False(一个表示真一个表示假)。一般布尔类型都只表示逻辑的计算结果。
164 9
|
6月前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
276 0