原文链接:http://happyshome.cn/blog/java/basics/variable.html
本文主要介绍了Java中基本的数据类型,以及如何在程序中正确的使用。
计算机处理数据,变量被用来存储处理的数据,之所以叫做变量因为你可以改变存储的值。更确切的说,一个变量指向着一块存储特定类型值的地址,换句话说,一个变量有名称、类型和值。一个变量有一个名称,例如radius、area、age和height,每个变量的名称都是唯一的,这边可以方便我们设置和获取变量的值。
一个变量有一种类型,下面是Java类型的列子:
变量存储特定类型的值,编程中要特别注意变量类型,举例:一个int变量存储整数123,但是不能存储浮点数12.34,同样也不能存储文本"Hello"。
早期的编程语言中引入了类型的概念来解释二进制01数据,类型定义了数据的结构、大小、范围以及针对该类型的一系列操作。
需要唯一的标识来命名变量,Java遵循以下标识的命名方式:
使用驼峰给变量命名:theFontSize、roomNumber、xMax、yMin、xTopLeft和thisIsAVeryLongVariableName, 可以参考下面的建议:
你需要定义变量的名称和类型才能在程序中使用变量,你可以使用下面的其中一种语法:
// 定义特定类型的变量, type identifier
int option;
// 定义多个同类型变量,变量之间用逗号分隔,type identifier1, identifier2, ..., identifierN
double sum, difference, product, quotient;
// 定义变量并初始化, type identifier = initialValue
int magicNumber = 88;
// 定义多个同类型变量并初始化, type identifier1 = initValue1, ..., identifierN = initValueN
String greetingMsg = "Hi!", quitMsg = "Bye!";
注意:
常量的命名规范:使用大写的单词,多个单词使用下划线连接,例如:MIN_VALUE,MAX_SIZE。
常量是不可变的,使用关键字final进行声明,常量声明后需要初始化
final double PI = 3.1415926;
表达式是由运算符和操作数组合而成,通过计算可以输出单个类型的值,例如
1 + 2 * 3 // 计算得到7
int sum, number;
sum + number // 计算得到一个int值
double principal, interestRate;
principal * (1 + interestRate) // 计算得到一个double值
指派一个右操作数赋值给左操作数,例如:x=1。
计算表达式的值并赋值给左操作数,例如:x=(y + z) / 2。
赋值语句的语法:
// 直接赋值, variable = literalValue
number = 88;
// 计算表达式之后赋值, variable = expression
number = number + 1; // 计算表达式number+1,最后将结果赋值给number
8 = number; // 错误的使用
number + 1 = sum; // 错误的使用
在Java中有两种类型:基本类型 (int、double等)和引用类型 (类和数组)。
内建的基本类型
基本类型内建在程序语言中,从上面的图中我们可以看出Java有8种基本类型。
例子:下面的程序用来输出打印基本类型的最大值、最小值和比特长度。
/*
* 输出基本类型的最大值、最小值和比特长度
*/
public class PrimitiveTypesMinMax {
public static void main(String[] args) {
// int (32位有符号整型)
System.out.println("int(min) = " + Integer.MIN_VALUE);
System.out.println("int(max) = " + Integer.MAX_VALUE);
System.out.println("int(bit-length) = " + Integer.SIZE);
// byte (8位有符号整型)
System.out.println("byte(min) = " + Byte.MIN_VALUE);
System.out.println("byte(max) = " + Byte.MAX_VALUE);
System.out.println("byte(bit-length)=" + Byte.SIZE);
// short (16位有符号整型)
System.out.println("short(min) = " + Short.MIN_VALUE);
System.out.println("short(max) = " + Short.MAX_VALUE);
System.out.println("short(bit-length) = " + Short.SIZE);
// long (64位有符号整型)
System.out.println("long(min) = " + Long.MIN_VALUE);
System.out.println("long(max) = " + Long.MAX_VALUE);
System.out.println("long(bit-length) = " + Long.SIZE);
// char (16位字符或者16位无符号整型)
System.out.println("char(min) = " + (int)Character.MIN_VALUE);
System.out.println("char(max) = " + (int)Character.MAX_VALUE);
System.out.println("char(bit-length) = " + Character.SIZE);
// float (32位浮点数)
System.out.println("float(min) = " + Float.MIN_VALUE);
System.out.println("float(max) = " + Float.MAX_VALUE);
System.out.println("float(bit-length) = " + Float.SIZE);
// double (64位浮点数)
System.out.println("double(min) = " + Double.MIN_VALUE);
System.out.println("double(max) = " + Double.MAX_VALUE);
System.out.println("double(bit-length) = " + Double.SIZE);
}
}
int(min) = -2147483648
int(max) = 2147483647
int(bit-length) = 32
byte(min) = -128
byte(max) = 127
byte(bit-length)=8
short(min) = -32768
short(max) = 32767
short(bit-length) = 16
long(min) = -9223372036854775808
long(max) = 9223372036854775807
long(bit-length) = 64
char(min) = 0
char(max) = 65535
char(bit-length) = 16
float(min) = 1.4E-45
float(max) = 3.4028235E38
float(bit-length) = 32
double(min) = 4.9E-324
double(max) = 1.7976931348623157E308
double(bit-length) = 64
String不是基本类型,是另外一种常用的类型,它表示文本内容,在Java中字符串使用双引号。
String message = "Hello, world!"; // 字符串使用双引号
char gender = 'm'; // 字符使用单引号
为变量选择数据类型
开发中需要设计合适的变量类型,多数时我们不难选择,你可以用int来存储整型,用float来存储有小数的数值,用String来存储文本,用char来存储单个字符和用boolean来存储二元结果。
经验法则
数据表示
值得注意的是char '1'与int 1、byte 1、short 1、float 1.0、double 1.0、String "1"是不相同的,它们在计算机的内存中有着不同的精度和说明,举例说明:
下面我们来看一个变量名称和类型的例子:
Paul买了一台abc品牌的笔记本电脑,3.2GHZ高速处理器、4GB内存、500GB硬盘、15英寸显示器,总价为$1650.45,在现场从服务计划A、B、C中选择了B计划,定义涉及的相关变量和类型。
String name = "Paul";
String brand = "abc";
double processorSpeedInGHz = 3.2; // 或者 float
double ramSizeInGB = 4; // 或者 float
int harddiskSizeInGB = 500; // 或者 short
int monitorInInch = 15; // 或者 byte
double price = 1650.45;
char servicePlan = 'B';
boolean onSiteService = true;
假设你正在为学校开发一款收集学生信息的软件,学生的信息包括年龄、地址、电话、性别、生日、身高、体重、年级、入学时间等,每个学生被分配一个8位数字标识,下面来使用变量定义它们吧。
编程中使用的文字、字面值都是特定的常量,例如123,-456,3.14,-1.2e3,'a',"Hello", 可以用做赋值或表达式。
Integer(int,long,short,byte)字面值
// 整数默认的都被视作int类型,例如123和-456,在Java中32位的int取值范围从-2,147,483,628(-2^31)到2,147,483,627(2^31-1)
int number = -123;
int sum = 1234567890; // 这个值在int取值范围内
int bigSum = 8234567890; // 错误: 这个值超出了int取值范围
// int字面值没有特殊说明都表示10进制,以0开头的数字表示8进制,以'0x'开头的数字表示16进制。
int number = 1234; // 10进制1234
int number = 01234; // 8进制1234, 10进制668
int number = 0x1abc; // 16进制1ABC, 10进制6844
// 从JDK1.7开始,你可以使用'0b'或者'0B'为前缀来表示二进制,你也可以使用下划线_对数字进行分组来提高可读性,但是开头和结尾必须使用数字。
int number1 = 0b01010000101000101101000010100010;
int number2 = 0b0101_0000_1010_0010_1101_0000_1010_0010;
int number3 = 2_123_456;
// long字面值用数字加上后缀'L'或'l'来表示
long bigNumber = 1234567890123L;
long sum = 123; // int类型123会被自动转换成long类型123L
// byte和short字面值不需要添加后缀,你可以直接使用整数初始化
byte smallNumber = 12345; // 错误: 超出了byte取值范围
byte smallNumber = 123;
short midSizeNumber = -12345;
// 有小数点的数值例如55.66和-33.44默认的被视作double类型,同样你可以用科学计数法表示,例如1.2e3, -5.5E-6, 大写E小写e表示10的指数,你可以用数字加上后缀'd'或'D'表示。
float average = 55.66; // 错误! 右操作是double类型, 需要后缀'f'来表示
float average = 55.66f;
字符字面值和转义序列
// 字符嵌入在单引号里面表示char类型,char类型使用16位的Unicode编码,算术运算上等同于16位无符号整型
char letter = 'a'; // 等同于97
char anotherLetter = 98; // 等同于'b'
System.out.println(letter); // 输出'a'
System.out.println(anotherLetter); // 输出'b'代替数字
anotherLetter += 2; // 100或'd'
System.out.println(anotherLetter); // 输出'd'
非打印的控制字符通常被称为转义序列,通常以反斜线\开始,下面是常用的转义序列:
说明:
String字面值
长度不定的字符串嵌入在双引号里面表示字符串字面值,例如"Hello, world!","The sum is: ",举例说明:
String directionMsg = "Turn Right";
String greetingMsg = "Hello";
String statusMsg = ""; // 空字符串
// 字符串字面值可能包含转义序列,在字符串你里面,你需要使用 \"来表示双引号,单引号不需要转义,举例说明:
System.out.println("Use \\\" to place\n a \" within\ta\tstring");
Use \" to place
a " within a string
练习:编写程序打印输出下面的字符。
'__'
(oo)
+========\/
/ || %%% ||
* ||-----||
"" ""
boolean字面值
// boolean字面值紧包含两个值:true和false
boolean done = true;
boolean gameOver = false;
字面值的例子
public class LiteralTest {
public static void main(String[] args) {
String name = "Tan Ah Teck"; // String使用双引号
char gender = 'm'; // char使用单引号
boolean isMarried = true; // true或者false
byte numChildren = 8; // byte取值范围[-127, 128]
short yearOfBirth = 1945; // short取值范围[-32767, 32768]
int salary = 88000;
long netAsset = 8234567890L;
double weight = 88.88;
float gpa = 3.88f;
// 输出
System.out.println("Name is " + name);
System.out.println("Gender is " + gender);
System.out.println("Is married is " + isMarried);
System.out.println("Number of children is " + numChildren);
System.out.println("Year of birth is " + yearOfBirth);
System.out.println("Salary is " + salary);
System.out.println("Net Asset is " + netAsset);
System.out.println("Weight is " + weight);
System.out.println("GPA is " + gpa);
}
}
Name is Tan Ah Teck
Gender is m
Is married is true
Number of children is 8
Year of birth is 1945
Salary is 88000
Net Asset is 1234567890
Weight is 88.88
Height is 188.8