知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

java基础之Java基本数据类型

发表时间:2022-03-25来源:网络

变量与数据类型

在程序设计语言中,变量(Variable)是在内存中动态存储值的地方。简单地理解,程序的作用就是对变量进行各种运算,所以我们首先来了解变量有哪些类型,如何定义变量。

Java要求在使用一个变量前要求必须声明它的类型。

声明一个变量就是向计算机申请内存来存储值,JVM会根据变量的类型为变量分配相应的存储空间。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符串等值。

Java中的数据类型分为两类:

基本数据类型(或者称为原生数据类型)引用数据类型

如何定义基本数据类型变量

在了解数据类型之前,我们先来看看如何声明一个基本数据类型变量。要想使用一个变量,就必须首先声明它。以下是几个声明变量的示例:

//VariableTest.java public class VariableTest { public static void main(String[] args) { int a = 1, b, c = 2; double pi = 3.14159; char x = 'x'; } }

其中:

可以一次声明一个或者多个同一类型的变量,比如第一条语句声明了三个整数可以在声明的同时,进行初始化赋值,比如第二条语句,在声明一个double类型变量的同时,将其赋值为3.1415926

如果变量在声明时没有进行初始化,则在使用前需要进行赋值,否则会编译报错,比如以下程序是不能通过编译的:

public class VariableTest { public static void main(String[] args) { int a; System.out.println(a); } }

在使用前进行赋值就没有问题了:

public class VariableTest { public static void main(String[] args) { int a; a = 100; System.out.println(a); } }

基本数据类型

数据类型是一门程序语言的基本构成元素,Java语言提供了八种基本类型,其中包括六种数字类型(四种整数型,两种浮点型),一种字符类型,还有一种布尔型。

byte

byte数据类型是8位、有符号整数;有符号指的是有正数和负数之分最小值是-128(-2^7)最大值是127(2^7-1)默认值是0byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一byte foo = 100; byte bar = -50;

short

short数据类型是16位、有符号整数最小值是-32768(-2^15)最大值是32767(2^15 – 1)默认值是0short数据类型也可以像byte那样节省空间,一个short变量是int变量所占空间的二分之一short number1 = 100; short number2 = -2000。

int

int数据类型是32位、有符号整数最小值是-2,147,483,648(-2^31)最大值是2,147,485,647(2^31 – 1)默认值是0int number1 = 50000; int number2 = -60000。

整型变量默认为int类型。

long

long数据类型是64位、有符号整数最小值是-9,223,372,036,854,775,808(-2^63)最大值是9,223,372,036,854,775,807(2^63 -1)默认值是0L这种类型主要使用在需要比较大整数的系统上long number1 = 50000L; long number2 = -60000L。

float

float数据类型是单精度、32位的浮点数float在储存大型浮点数组的时候可节省内存空间默认值是0.0f浮点数不能用来表示精确的值,如货币float f1 = 123.f; float f2 = 456.f;

double

double数据类型是双精度、64位的浮点数浮点数的默认类型为double类型默认值是0.0ddouble类型同样不能表示精确的值,如货币double number1 = 3333.4;

boolean

boolean数据类型表示一位的信息只有两个取值:true和false默认值是false这种类型只作为一种标志来记录true/false情况boolean flag = true; boolean active = false;

char

char类型是一个单一的16位Unicode字符最小值是’\u0000’(即为0)最大值是’\uffff’(即为65,535)默认值是’\u0000’(即为0)char数据类型可以储存任何字符char letter = 'A';

整数的不同进制

byte、short、int和long都可以用十进制、二进制、八进制以及十六进制的方式来表示。当使用常量字面量时,前缀0b表示二进制,0表示八进制,而前缀0x代表十六进制。比如:

int decimal = 174; int binary = 0b10101110; int octal = 0256; int hexa = 0xAE;

为什么174用二进制表示就是10101110呢?

174是由个位数的4、十位数的7和百位数的1构成:



如果使用二进制,则可以表达为:



上面图片中所有红色的数字就构成了二进制表示10101110。

哪如何将一个十进制数转换为二进制数呢?

将十进制数不断除以2,直到等于0,每次除法产生的余数从后往前合并在一起就是对应的二进制表示:



对于八进制和十六进制,原理是类似的。

类型转换

一个浮点数字面量默认是double类型,如果要定义float类型则要在字面量最后添加f或者F:

double a = 1.23; float b = 1.23F; float c = 1.23; // 编译错误

以上代码中,第三行代码将出现编译错误,因为1.23这个字面量是double类型的,不能将其赋值给float类型。

一个整数字面量默认是int类型,如果要定义长整形(long)则要在字面量最后添加l或者L。但是

int a = 100; long b = 100000L; long c = 100000;

第三行代码long c = 100000;不会有编译错误,虽然字面量123是int类型的,但是当int类型赋值给long类型时,可以自动转换为long类型。

占用内存空间小的类型可以自动转换为占用空间大的类型,反之则不成立。你把一个变量的想象成一个箱子,更小的箱子里的东西可以放入到更大的箱子中,将更大的箱子里的东西放到更小的箱子则可能装不下。比如:

b = a;是合法的赋值a = b;则是非法的赋值,会有编译错误,这其实也是代码float c = 1.23;会发生编译错误的原因

如果一定要将b的值(long类型)赋值给a,则要进行强制转换:

a = (int)b;

b变量前的(int)表示将b的值强制转换为int类型。注意强制类型转换时,可能导致数据错误,比如b的值超过了int类型的表示范围,此时就会进行数据截断(丢掉箱子装不下的东西),我们应该尽量避免这种情况。



基本类型之间的自动转换关系如下:



包装类

以上8种基本类型都不是类,Java提供了对应的类,称之为包装类。包装类可以认为是将基本类型转换成的一个引用类型。



每种基本类型所占用的内存空间大小,最大值和最小值,可以通过其包装类来访问。比如为了我们可以这样访问int类型的相关信息:

System.out.println("int类型的二进制位数:" + Integer.SIZE); System.out.println("int类型的最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("int类型的最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);

注意,将一个整数和字符串通过+号拼接起来,整数可以自动转换为字符串。

以Integer和int为例,我们可以将两者进行转换,例如:

Integer in = new Integer(100); // 将int转换为包装类 int m = in.intValue(); // 获取Interger的int值 String s = “123”; int n = Integer.parseInt(s); // 将字符串转换为整数 String s2 = Interger.toString(n); // 将整数转换为字符串

其它数据类型的操作是类似的,不再一一赘述。

数组

数组(Array)是程序设计语言中必不可少的一种结构,它用来描述一系列相同类型的数据。一个数组一旦创建后,它的长度是固定的。

下面的代码,定义了一个长度为10的数组,数据的下标编号从0开始,9是最后一个元素。下面是一个Java语言数组的例子:

int[] anArray; anArray = new int[10];//初始化一个长度为10的整形数组 anArray[0] = 100;//初始化第一个变量 anArray[1] = 200; anArray[2] = 300; anArray[3] = 400; anArray[4] = 500; anArray[5] = 600; anArray[6] = 700; anArray[7] = 800; anArray[8] = 900; anArray[9] = 1000;

这样初始化数组比较麻烦,下面是另外一种更加便捷的方式:

int[] anArray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};

这样会自动创建一个长度为10的int数组。我们通过anArray.length可以得到数组的长度。

String

一个字符串就是一个字符序列,字符串被广泛应用于 Java 编程。Java语言将字符串作为String类型的对象进行处理。

String并不是基本的数据类型,是一个类。最常用的创建字符串对象的方法如下:

String str = "abc";

字符串可以通过+和+=操作符进行拼接,比如:

String str1 = "abc"; String str2 = str1 + "def"; str1 += "def";

最后str1和str2所指向的字符串内容为”abcdef”。

字符串和基本数据类型也能通过+进行拼接操作,比如:

int a = 100; String str = "a=" + a;

str字符串的内容为”a=100″。即基本类型和字符串类型相加时,基本类型会自动转换为其字符串表示,在这个例子中相当于:

String str = "a=" + "100";

回顾包装类这一小节的代码:

System.out.println("int类型的最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);

就是将字符串和数据类型的拼接。

String类的实例是一个不可变的对象,意味着对String的操作都会产生一个新的String对象。

例如,String有一个reverse()方法

String str = "123"; str.reverse(); // 进行反转操作会产生一个新的对象 System.out.println(str); // str本身不可变,所以打印出来依然是123 String str2 = str.reverse(); // 将产生的新对象赋值给一个新的引用变量 System.out.println(str2); // str2的内容为321

获取控制台输入

我们已经知道如何向控制台输出信息,那么如何从控制台获取输入呢?

为了获取控制台输入,首先需要一个创建一个Scanner对象:

Scanner scanner = new Scanner(System.in);

Scanner对象可以读取用户在命令行输入的各种数据类型,比如:

通过nextInt()方法读取整数通过nextFloat()方法读取浮点数

其它基本数据类型的读取是类似的,调用对应的方法即可。

Scanner对象也可以读取用户输入的字符串:

通过next()方法读取一个字符串通过nextLine()读取完整的一行,即用户输入回车键之前的所有输入信息(不包括回车键),以String返回

下面的代码,从控制台读入一个整数,然后打印:

public class HelloWorld { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int number = scan.nextInt(); System.out.println(number); scan.close(); } }
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜