导言:
在Java中有很多与C语言类似的语法,但其中又有不同之处。本篇文章主要对java中的数据类型,变量以及类型转换进行简单的介绍,并指出与C的相同与不同之处。
目录
正文:
一.数据类型
Java中的数据类型分为两类:基本数据类型和引用数据类型。
1.基本数据类型
Java中的基本数据类型包括四类,整型、两种浮点型、一种字符型和一种布尔型,如下表所示:
注意:
- 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
- 整形和浮点型都是带有符号的
- 整型默认为int型,浮点型默认为double
- char类型在Java中占两个字节,可以存一个汉字
- 布尔类型占多少字节官方并没有给出确切的答案,但大部分的编译器都设置为了一个字节。
2.引用数据类型
Java中的引用数据类型包括类、接口、数组等,它们都是通过引用来访问的,存储的是对象的地址。引用数据类型在使用时需要先创建对象,然后使用引用来访问对象的属性和方法。这里对其进行一些简单的介绍。
类
类是Java中最基本的引用数据类型,它是一种自定义的数据类型,用于封装数据和方法。通过定义类,我们可以创建对象,从而实现面向对象编程。类的定义包括类名、属性和方法,其中属性表示类的状态,方法表示类的行为。下面是一个简单的类定义示例:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
接口
接口是一种特殊的引用数据类型,它定义了一组方法的签名,但没有实现这些方法的代码。通过实现接口,我们可以为类添加新的行为。接口的定义包括接口名、方法签名和常量。下面是一个简单的接口定义示例:
public interface Shape {
double getArea();
double getPerimeter();
}
数组
数组是一种容器,用于存储相同类型的数据。数组的元素可以是基本数据类型或引用数据类型。数组的定义包括数组类型、数组名和数组长度。下面是一个简单的数组定义示例:
int[] nums = new int[5];
二.变量
变量是用来存储数据的容器。变量具有特定的数据类型,可以存储不同类型的数据,包括基本数据类型和引用数据类型。变量在使用之前需要先声明,并且可以赋予初始值。
1.变量的声明和初始化
在Java中,变量需要先声明后使用。变量的声明包括变量的类型和名称。变量的初始化是指为变量赋予初始值。变量的初始化可以在声明时进行,也可以在后续的代码中进行。以下是变量的声明和初始化示例:
int age; // 变量的声明
age = 20; // 变量的初始化
或者可以在声明的同时进行初始化:
int age = 20; // 变量的声明和初始化
需要注意的是如果未初始化变量就进行使用,Java中会直接报错。例如:
public class test {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}
2.变量的命名规则
变量的命名需要遵循一定的规则:
- 变量名只能由字母、数字和下划线组成。
- 变量名不能以数字开头。
- 变量名区分大小写,即
age
和Age
是不同的变量名。- 变量名不能使用Java的关键字,如
int
、double
、if
等。- 变量名应该具有描述性,能够清晰地表达变量的含义,以增加代码的可读性。
- 变量名应该使用驼峰命名法,即首字母小写,后面的单词首字母大写,如
myVariable
。- 如果变量名由多个单词组成,可以使用下划线分隔,如
my_variable
。前面四条都是硬性规定,违反会报错,后面三条都是为了养成好的编程习惯所需要的,违反并不会报错。
int age; //正确的变量名
double salary; //正确的变量名
char _grade; //正确的变量名,以下划线开头
boolean isStudent; //正确的变量名,以字母开头,且使用驼峰命名法
int 1score; //错误的变量名,以数字开头
double Salary; //正确的变量名,区分大小写
3.具体类型的变量
以不同的数据类型可以定义不同类型的变量,大体分为整形变量,字符变量和浮点型变量等。整形变量中又包含了:整形变量,长整形变量,短整形变量,字节型变量。浮点型变量中包括:双精度浮点型和单精度浮点型。由于基本数据类型的变量都大同小异,这里就简单讨论下浮点型变量的细节。
先看一段代码:
int a = 1;
int b = 2;
System.out.println(a / b);
该运算结果为0.
在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 0.5, 需要使用 double 类型计算。
再来看一段代码:
double num = 1.1;
System.out.println(num * num);
运行结果如下:
这是由于浮点数在计算机中以二进制表示,而二进制无法精确表示某些十进制小数。在这种情况下,计算机会尽可能地近似表示这个小数。所以,虽然1.1乘以1.1的结果是1.21,但由于浮点数的精度限制,计算机会返回一个近似的结果1.2100000000000002。
在Java中使用双精度浮点数需要有几点注意的:
1. double在任何系统下都占8个字节
2. 浮点数与整数在内存中的存储方式不同,不能单纯使用的形式来计算
3. double的包装类型为Double4. double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
三.类型转换
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。
例如:
int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败
运行结果如下:
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。
1.隐式类型转换(自动类型转换): 隐式类型转换是指在一定条件下,Java编译器会自动将一种数据类型转换为另一种数据类型,而无需显式地进行类型转换。隐式类型转换的规则如下:
- 从小范围类型到大范围类型:byte -> short -> int -> long -> float -> double
- char 类型可以隐式转换为 int 类型
- 当运算符两边的操作数类型不同时,会自动将较小范围的类型转换为较大范围的类型
2.显式类型转换(强制类型转换): 显式类型转换是指在需要将一个较大范围的数据类型转换为较小范围的数据类型时,需要使用强制类型转换操作符来进行显式类型转换。显式类型转换的语法如下:
- 目标类型变量 = (目标类型) 原始值;
- 显式类型转换可能会导致数据丢失或溢出,需要注意数据的范围和精度。
例如,将一个整数类型转换为浮点数类型:
int num1 = 10;
float num2 = num1; // 隐式类型转换
int num3 = 20;
double num4 = (double) num3; // 显式类型转换
进行类型转换时需要注意以下几点:
1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换
四.类型提升
在Java中,当两个不同类型的操作数进行运算时,会发生类型提升(也称为自动类型转换)。类型提升是指将操作数中的某个类型自动提升为更高的类型,以便进行运算。
ava中的类型提升规则如下:
- 如果两个操作数都是整数类型,那么它们将被提升为相同的类型,优先级为long > int > short > byte。
- 如果一个操作数是整数类型,另一个操作数是浮点类型,那么整数类型将被提升为浮点类型。
- 如果两个操作数都是浮点类型,那么它们将被提升为相同的类型,优先级为double > float。
例如,当一个int类型的变量和一个double类型的变量进行运算时,int类型的变量会被自动提升为double类型,如下所示:
int num1 = 10;
double num2 = 3.14;
double result = num1 + num2; // num1会被自动提升为double类型
同时如果不注意类型提升也会出现一些问题:
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
该代码会报错:
虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误。
总之类型提升会遵循下面两点:
1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.
总结:
java中很多的基础知识与c语言一样,但细节上又有些不同,在学习时要格外注意两者的联系与区别,以免混淆。希望本文对你有所帮助。