Java数据类型简述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、变量和类型

1. 概念

  • 内存中的一个储区域
  • 该区域的数据可以在同一类型范围内不断变化
  • 变量是程序中最基本的存储单元。包含 变量类型、名和存储的值

2.作用

  • 用于在内存中保数据

3.使用变量注意:

  • JavaJavaJavaJava中每个变量必须先 声明,后使用
  • 使用变量名来访问这块区域的 数据
  • 变量 的作用域 :其定义所在的一对 { }内
  • 变量只有在其作用域内才效
  • 同一 个作用域内,不能定义重名的变量

4.声明和赋值变量

  • 语法: <数据类型 ><变量名 > = <初始化值 >
  • 举例:int a = 11;

5.变量的分类

5.1.按数据类型

  • 主要是分为基本数据类型和引用数据类型。见下图:
  • 基本数据类型的每一种数据都定义了明确的具体类型(强语言),在内存中分配了不同大小的内存空间。
    在这里插入图片描述
    基本类型及其包装类:
    在这里插入图片描述

5.2.按声明的位置不同

  • 在方法体外,类内声明的变量称为 成员变量 。
  • 在方法体内部声明的变量称为 局部变量 。
    在这里插入图片描述
  • 注意:二者在初始化值方面的异同 :
    同: 都有生命周期
    异: 局部变量除形参外,需显式初始化。

6. 标识符命名规则

  • 标识符
    Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符 技巧:凡是自己可以起名字的地方都叫标识符
  • 定义合法标识符规则
  1. 由26个英文字母大小写,0-9 ,_或 $ 组成
  2. 数字不可以开头。
  3. 不可以使用关键字和保留字,但能包含关键字和保留字。
  4. Java中严格区分大小写,长度无限制。
  5. 标识符不能包含空格。
  • Java中的名称命名规范:

包名:多单词组成时所有字母都小写:xxxyyyzzz

类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz

变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz

常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

  • 注意:
  1. 在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
  2. java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。

二.数据类型详述

1.整数型

Java 各整数类型有固定的表范围和字段长度,不受具体 OS 的影响,以保证java程序的可移植性

1.1 .整型变量(int)

  • 语法格式:int 变量名 = 初始值;
  • 示例:
  int num = 10; // 定义一个整型变量
  System.out.println(num) ;
  • 注意:
    a.在java中int类型就是4个字节,跟系统无关。
    b.由于在java中是没有无符号整型概念的,所以int的取值范围是 -2^31 ~ 2^31-1

  • 取值范围:
    使用以下代码查看 Java 中的整型数据范围

System.out.println(Integer.MAX_VALUE); // int 的最大值 
System.out.println(Integer.MIN_VALUE); // int 的最小值

运行截图
在这里插入图片描述
如果运算的结果超出了int的取值范围,则数据就会溢出

public staticn void main(Stringh[] args){
    System.out.println(Integer.MAX_VALUE+1); // int 的最大值加1就会溢出
    System.out.println(Integer.MIN_VALUE-1); // int 的最小值减1就会溢出
}

运行截图
在这里插入图片描述
仔细对比就会发现,int所表示的最大值加1溢出后变成了最小值,而最小值减1后变成了最大值,我们可以把类型范围表示看成一个圆形
在这里插入图片描述
中间的是分界线,如果超过了最大值则就变成了最小值,这种概念可以应用与所有的整型类型。

1.2.长整型(Long)

  • 基本语法格式:long 变量名 = 初始值;
  • 示例:
  long num = 10L; // 定义一个长整型变量, 初始值写作10l (L可以小写也可以大写).
  System.out.println(num) ;
  • 注意:
  • 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long
  • 初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以.
  • 使用 10 初始化也可以, 10 的类型是 int, 10L 的类型是 long, 使用 10 L 或者 10 l 更好一些。
  • 取值范围:
    Java 中 long 类型占 8 个字节. 表示的数据范围 -2^63 -> 2^63-1
    使用以下代码查看 Java 中的长整型数据范围:
System.out.println(Long.MAX_VALUE); 
System.out.println(Long.MIN_VALUE)

运行截图:在这里插入图片描述
这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.

1.3.短整型变量(short)

  • 基本语法格式: short 变量名 = 初始值;
  • 示例:
short value = 0; 
System.out.println(value);
  • 注意事项:
  1. short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767
  2. 这个表示范围比较小, 一般不推荐使用.

1.4.字节类型变量(byte)

  • 基本语法格式: byte 变量名 = 初始值;
  • 示例:
byte value = 0; 
System.out.println(value);
  • 注意事项:
  1. 字节类型只占一个字节, 表示范围较小 ( -128 ~+127 )
  2. 字节类型和字符类型互不相干.

2.浮点类型

2.1.单精度浮点型变量(float)

  • 基本语法格式:float 变量名 = 初始值;
  • 示例:
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);
  • 注意
    float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都 优先考虑 double, 不太推荐使用 float。

2.2.双精度浮点型变量(double)

  • 基本语法格式:double 变量名 = 初始值;
  • 示例;
double num = 1.0;
System.out.println(num);
  • 浮点型和整型的区别:
public static void main(String[] args) {
  int a = 1;
  int b = 2;
  System.out.println(a / b);
  }

如果站在数学角度来讲,得到的应该是0.5,可运行结果得到的是0。
运行截图:
在这里插入图片描述
因为a和b是int类型变量,所以得到的结果也会是int类型的值,而int是无法储存小数的。如果想要得到小数,那我们就需要把int改成double。

public static void main(String[] args) {
  double a = 1;
  double b = 2;
  System.out.println(a / b);
  }

运行截图:
在这里插入图片描述

  • 看一段有趣的代码
public static void main(String[] args) {
  double a = 1.1;
  double b = 1.1;
  System.out.println(a * b);
  }

在这里插入图片描述
理论来讲,得出的结果应该是1.21,为什么后面还多了个2?这是因为Java 中的 double 虽然也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围,Java 的 double 类型的内存布局遵守IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差。

3.字符类型变量(char)

  • 基本语法格式:char 变量名 = 初始值;
  • 示例:
char ch = 'A';
System.out.println(ch);
  • 注意:
    char 型数据用来表示通常意义上“字符”(2字节)
    Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
    char类型是可以进行运算的,因为它都对应有Unicode码。
    Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字 母,一个汉字,或其他书面语的一个字符。

  • 使用一个字符表示一个汉字:

char ch = '呵';
System.out.println(ch);

执行 javac 的时候可能出现以下错误:

Test.java:3: 错误: 未结束的字符文字
char ch = '鍛?';
^

此时我们在执行 javac 时加上 -encoding UTF-8 选项即可打印出汉字

javac -encoding UTF-8 Test.java
  • 字符型变量的三种表现形式:
  • 字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
  • Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。 例如:char c3 = ‘\n’; // '\n’表示换行符
  • 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。

4.布尔类型变量(boolean)

  • 基本语法格式:boolean 变量名 = 初始值;
  • 示例:
boolean value = true;
System.out.println(value);
  • 注意:
  • boolean 类型的变量只有两种取值, true 表示真, false 表示假.。
  • Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。
  • boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定。
  • boolean 类型用来判断逻辑条件,一般用于程序流程控制:
  • if条件控制语句;
  • while循环控制语句;
  • do-while循环控制语句;
  • for循环控制语句;

5.字符串类型

  • 基本语法格式: String 变量名 = “初始值”;
  • 示例:
String name = "zhangsan";
System.out.println(name);
  • 注意:
  • Java 使用 双引号 + 若干字符 的方式表示字符串字面值。
  • 和基本数据类型不同, String 引用数据类型。
  • 字符串中的一些特定的不太方便直接表示的字符需要进行转义。
    转义字符示例:
// 创建一个字符串 My name is "张三" 
String name = "My name is \"张三\"";

常用转义字符:

转义字符解释
\n换行
\t水平制表符
\’单引号
\“双引号
\反斜杠
  • 字符串的”+“操作:
  1. 字符串拼接:
String a = "hello "; 
String b = "world"; 
String c = a + b;
System.out.println(c);

//执行结果
hello world
  1. 字符串和整数进行拼接:
String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);

//执行结果
result = 1020

以上代码说明, 当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为。

6.常量

6.1.字面值常量

10     // int 字面值常量(十进制)
010    // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10   // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16 
10L    // long 字面值常量. 也可以写作 10l (小写的L) 
1.0    // double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2  // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2 1.0f 
1.0f   // float 字面值常量, 也可以写作 1.0F
true   // boolen 字面值常量, 同样的还有 false 
‘a’    // char 字面值常量, 单引号中只能有一个字符
"abc"  // String 字面值常量, 双引号中可以有多个字符.

6.2.final 关键字修饰的常量

final int a = 10; 
a = 20; // 编译出错. 提示无法为最终变量a分配值

常量不能在程序运行过程中发生修改。

三.数据类型转换

1.基本数据类型转换

  • 自动类型转换
    容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为: 在这里插入图片描述
  • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的 那种数据类型,然后再进行计算。
  • byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
  • boolean类型不能与其它数据类型运算。
  • 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。

2.强制类型转换

  • 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使 用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。

  • 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
    例如:String a = “43”; int i = Integer.parseInt(a);

  • boolean类型不可以转换为其它的数据类型。

3.类型转换小结

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.

总结

以上就是今天要讲的内容,本文仅仅简单介绍了Java中基本数据类型的分类以及相关的简单应用,引用数据类型后续再做介绍。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值