Java 数据类型
数据类型 是指可以存储在变量中的不同大小和数值,这些变量是根据方便和情况制定的,以涵盖所有测试案例。另外,让我们来介绍一下其他重要的疾病,主要有两种类型的语言,如下所示。
- 首先,一种是 静态类型的语言 ,其中每个变量和表达式的类型在编译时已经知道。一旦一个变量被声明为某种数据类型,它就不能持有其他数据类型的值。例如C、C++、Java。
- 另一种是 动态类型的语言, 这些语言可以随着时间的推移接收不同的数据类型。例如:Ruby, Python
Java是 静态类型语言,也是强类型语言 ,因为在Java中,每一种数据类型(如整数、字符、十六进制、打包十进制等)都被预定义为编程语言的一部分,为特定程序定义的所有常量或变量都必须用其中一种数据类型描述。
Java有两类数据类型,其中数据类型被分隔为 ****
- 原始数据类型: 如布尔值、char、int、short、byte、long、float和double
- 非原始数据类型或对象数据类型: 如字符串、阵列等。
原始数据类型的类型
原始数据只是单一的值,没有特殊的功能。有 8种原始数据类型, 它们以表格的形式描述如下。
让我们讨论并实现以下数据类型中的每一种。
类型1:布尔型
布尔数据类型只代表一位信息,要么是真,要么是假 ,旨在代表逻辑和布尔代数的两个真值,但布尔数据类型的大小是 虚拟机器依赖的。 布尔类型的值不能隐含地或显式地(用casts)转换为任何其他类型。但程序员可以很容易地编写转换代码。
语法
boolean booleanVar;
大小: 取决于虚拟机
值: 布尔值,如真、假
默认值: false
例子
// Java Program to Demonstrate Boolean Primitive DataType
// Class
class GFG {
// Main driver method
public static void main(String args[])
{
//Boolean data type is a data type that has one of two possible values (usually denoted true and false).
// Setting boolean to false and true initially
boolean a = false;
boolean b = true;
// If condition holds
if (b == true){
// Print statement
System.out.println("Hi Geek");
}
// If condition holds
if(a == false){
// Print statement
System.out.println("Hello Geek");
}
}
}
输出
Hi Geek
Hello Geek
类型2:字节
字节数据类型是一个8位有符号的两补整数。字节数据类型对于节省大数组的内存非常有用。
语法
byte byteVar;
大小: 1个字节(8位)。
值: -128至127
默认值: 0
例子
// Java Program to demonstrate Byte Data Type
// Class
class GFG {
// Main driver method
public static void main(String args[]) {
byte a = 126;
// byte is 8 bit value
System.out.println(a);
a++;
System.out.println(a);
// It overflows here because
// byte can hold values from -128 to 127
a++;
System.out.println(a);
// Looping back within the range
a++;
System.out.println(a);
}
}
输出
126
127
-128
-127
类型3:short数据类型
short数据类型是一个16位有符号的二补整数。与字节类似,在大数组中使用short来节省内存,在这种情况下,节省的内存实际上很重要。
语法
short shortVar;
大小: 2个字节(16位
值: -32, 768至32, 767(包括)。
默认值: 0
类型4:int
它是一个32位有符号的二进制补码整数。
语法
int intVar;
大小: 4个字节( 32位 )
值: -2, 147, 483, 648到2, 147, 483, 647(包括)。
注意: 默认值是’0
记住: 在Java SE 8及以后的版本中,我们可以使用int数据类型来表示一个无符号的32位整数,其数值范围为[0, 232 -1]。使用Integer类来使用int数据类型作为一个无符号的整数。
类型5:long
long的范围相当大。long数据类型是一个64位的两补整数,对于那些int类型不足以容纳所需数值的场合非常有用。
语法
long longVar;
大小: 8字节(64位)。
值: {-9, 223, 372, 036, 854, 775, 808}到{9, 223, 372, 036, 854, 775, 807}。(包括在内)
注意: 默认值是’0’。
记住: 在Java SE 8及以后的版本中,你可以使用long数据类型来表示一个无符号的64位long,它的最小值为0,最大值为264 -1。Long类还包含一些方法,如无符号比较、无符号除法等,以支持无符号long的算术操作。
类型6:float
float数据类型是一个单精度的32位IEEE 754浮点。如果你需要在大的浮点数数组中节省内存,请使用float(而不是double)。
语法
float floatVar;
大小: 4字节(32位)。
值: 最多7位十进制数字
注: 默认值是’0.0’。
例子
// Java Program to Illustrate Float Primitive Data Type
// Importing required classes
import java.io.*;
// Class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Declaring and initializing float value
// float value1 = 9.87;
// Print statement
// System.out.println(value1);
float value2 = 9.87f;
System.out.println(value2);
}
}
输出
9.87
如果我们取消对第14、15、16行的注释,那么输出就会完全不同,因为我们会面临一个错误。
类型7:double
double数据类型是一个双精度的64位IEEE 754浮点。对于十进制数值,这种数据类型通常是默认选择。
语法
double doubleVar;
大小: 8字节或64位
数值: 最多16位小数
注意
- 默认值为’0.0’。
- float和double数据类型是专门为科学计算而设计的,其中近似误差是可以接受的。如果精度是最重要的问题,那么建议不要使用这些数据类型,而使用BigDecimal类。
建议在java中浏览一下四舍五入的错误。
类型8:char
char数据类型是一个单一的16位Unicode字符。
语法
char charVar;
大小: 2个字节(16位
值: ‘\u0000’ (0) 到 ‘\uffff’ (65535)
注意: 默认值是’\u0000’。
你一定想知道为什么Java中char的大小是2字节?
在其他语言中,如C/C++只使用ASCII字符,要表示所有ASCII字符,8位就足够了。但是java使用的是 Unicode系统,而不是ASCII 码系统,为了表示Unicode系统,8比特不足以表示所有的字符,所以java使用2字节的字符。 Unicode 定义了一个完全国际化的字符集,可以表示世界上大多数的书面语言。它是几十个字符集的统一,如拉丁语、希腊语、西里尔语、片假名、阿拉伯语等等。
例子
// Java Program to Demonstrate Char Primitive Data Type
// Class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating and initializing custom character
char a = 'G';
// Integer data type is generally
// used for numeric values
int i = 89;
// use byte and short
// if memory is a constraint
byte b = 4;
// this will give error as number is
// larger than byte range
// byte b1 = 7888888955;
short s = 56;
// this will give error as number is
// larger than short range
// short s1 = 87878787878;
// by default fraction value
// is double in java
double d = 4.355453532;
// for float use 'f' as suffix as standard
float f = 4.7333434f;
//need to hold big range of numbers then we need this data type
long l = 12121;
System.out.println("char: " + a);
System.out.println("integer: " + i);
System.out.println("byte: " + b);
System.out.println("short: " + s);
System.out.println("float: " + f);
System.out.println("double: " + d);
System.out.println("long: " + l);
}
}
输出
char: G
integer: 89
byte: 4
short: 56
float: 4.7333436
double: 4.355453532
long: 12121
非原始数据类型或参考数据类型
参考数据类型 将包含变量值的内存地址,因为参考类型不会直接在内存中存储变量值。它们是字符串、对象、数组等。
A:字符串
字符串被定义为一个字符数组。在Java中,字符数组和字符串的区别在于,字符串被设计为在一个单一的变量中保存一个字符序列,而字符数组是一个独立的char类型实体的集合。与C/C++不同,Java字符串不以空字符结尾。
语法: 声明一个字符串
<String_Type> <string_variable> = “<sequence_of_string>”;
例子
// Declare String without using new operator
String s = "GeeksforGeeks";
// Declare String using new operator
String s1 = new String("GeeksforGeeks");
B:类
类是一个用户定义的蓝图或原型,对象就是从这里创建的。 它代表了一种类型的所有对象所共有的属性或方法的集合。一般来说,类的声明可以依次包括这些部分。
- 修饰语 :一个类可以是公共的,也可以有默认的访问。请参考Java中类或接口的访问指定符
- 类名: 名称应该以首字母开始(按惯例大写)。
- 超类(如果有的话): 类的父类(超类)的名称,如果有的话,前面要加上关键字extends。一个类只能扩展(子类)一个父类。
- 接口(如果有的话): 以逗号分隔的列表,列出该类所实现的接口(如果有的话),前面加上关键字 implements。一个类可以实现一个以上的接口。
- 主体: 类的主体由大括号{ }包围。
C:对象
它是面向对象编程的一个基本单位,代表现实生活中的实体。 一个典型的Java程序会创建许多对象,如你所知,这些对象通过调用方法进行交互。一个对象由以下部分组成。
- 状态 :它由一个对象的属性表示。它也反映了一个对象的属性。
- 行为 :它由一个对象的方法来表示。它也反映了一个对象对其他对象的反应。
- 身份 :它给一个对象一个独特的名字,并使一个对象能够与其他对象互动。
D:接口
像类一样,接口可以有方法和变量,但在接口中声明的方法默认是抽象的(只有方法签名,没有主体)。
- 接口规定了一个类必须做什么,而不是如何做。它是类的蓝图。
- 一个接口是关于能力的,比如播放器可以是一个接口,任何实现播放器的类都必须能够(或必须实现)move()。所以它规定了类必须实现的一组方法。
- 如果一个类实现了一个接口,但没有为接口中指定的所有函数提供方法体,那么该类必须被声明为抽象的。
- 一个Java库的例子是比较器接口。如果一个类实现了这个接口,那么它就可以用来对一个集合进行排序。
E:数组
数组是一组类型相似的变量,它们用一个共同的名字来指代。Java中的数组与C/C++中的数组工作方式不同。下面是关于Java数组的一些重要观点。
- 在Java中,所有数组都是动态分配的。(下面讨论)
- 由于数组在Java中是对象,我们可以用成员长度来查找它们的长度。这与C/C++不同,在C/C++中我们使用size来查找长度。
- 一个Java数组变量也可以像其他变量一样用[]在数据类型后声明。
- 数组中的变量是有序的,每个变量都有一个从0开始的索引。
- Java数组也可以作为一个静态字段、局部变量或方法参数使用。
- 数组的 大小 必须由一个int值指定,而不是long或short。
- 数组类型的直接超类是Object。
- 每个数组类型都实现了Cloneable和java.io.Serializable接口。