您的位置:首页 > 编程语言 > Java开发

【Java学习】基本数据类型及其转换

2018-07-22 16:35 169 查看

 一、8种基本数据类型

类型 数据类型

   所占字节数

默认值 最小值 最大值
整型 byte 1 byte 0 - 2^7 2^7
short 2 byte 0  - 2^15 2^15 - 1
int 4 byte 0  - 2^31 2^31 - 1
long 8 byte 0  - 2^63 2^63 - 1
浮点型 float 4 byte 0.0 1.4E-45 3.4028235E38
double 8 byte  0.0 4.9E-324 1.7976931348623157E308
字符型 char 2 byte '\u0000'(空) 0 2^16 -1 
逻辑型 Boolean 1/8 byte false \ \

【注】超出范围赋值时会发生错误。 

1.整型

   int最常用,直接给出一个整数都是默认为int类型。但两种情况必须指出:

  • 直接赋值给short或byte时,系统自动把该值当成对应类型处理(如果系统把该值当成int,显然一个int值不能赋值给这二者);

直接赋值给long类型时,系统默认该值为int,在赋值时再转化为long类型。因此,一个整型值的的范围超出int类型时必须在数值后面加上l或L,显式指出其类型为long。

[code]long a = 9999999999999;
System.out.println(99999999999999);
//以上两者会有超范围报错,正确写法如下(不用小写l防止与数字1混淆):
long a = 9999999999999L;
System.out.println(99999999999999L);

Java支持用二进制、八进制、十六进制整数,分别用0b(或0B)、0、0x(或0X)开头。

【注】二进制的short和byte为无符号二进制数,如byte的范围为-0b100000000到0b01111111,int和long为二进制补码形式。

[code]byte binary0 = 0b01111111;   //binary0=127;
byte binary1 = 0b10000001;   //报错:cannot convert from int to byte
byte binary2 = -0b0000001;   //正确;
int binary3 = 0b11111111111111111111111111111111;  //binary3 = -1;

 2.浮点型

  • 默认类型为double类型,需要系统把一个浮点数当做float类型,要在该值的后面加上f(F)。
  • 科学计数法表示的是浮点数,如1900为整型,但19e2为浮点型。

浮点数提供三个特殊值,正无穷(POSITIVE_INFINITY)、负无穷(NEGATIVE_INFINITY)和非数(NaN),表示溢出和出错,因此支持浮点数运算的除数为0(整数运算不行)。所有的正无穷相等,所有的负无穷相等,非数不与任何数(包括非数)相等。

[code]public class Test {
public static void main(String[] args) {
double a = 2.0/0;
double b = -1.0/0.0;
System.out.println(a + b);
if(-a == b)
System.out.println(-a + "=" + b);
}
}
/*运行结果:
NaN
-Infinity=-Infinity
*/

3.字符型 

         Java字符型使用Unicode字符集,一共可以表示65536个字符(包括常见的汉字),其中前256个字符与ASIC字符相同。可以有多种方式表示字符:

a)在字符外加一个单引号,如'a', '平'。

b)在转移字符外加单引号,转义字符有:

  • 特殊字符。只能用转义字符表示:
转义字符 说明 转义字符 说明
\b 退格符 \n 换行符
\r 回车符 \t 制表符
\' 单引号 \" 双引号
\\ 反斜杠    
  • 八进制转义字符: \ + 1到3位八进制数字。
  • Unicode表示:\u + 4位十六进制数字。

 c)用进制数字表示,char字符在计算机中是以无符号整型型储存的,整数0~65535和字符一 一对应。

[code]public class Test {
public static void main(String[] args) {
char a = 97;             //a = 'a';
char b = '\142';         //b = 'b';
char c = '\u0063';        //c = 'c';
char 平 = '平';           //java允许用中文作为变量名
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(平);
}
}

【注】char类型在计算机的储存为无符号整型,能用char类型变量进行整数直接的比较和运算。 

4.布尔型

     boolean型的值为false和true,和C/C++不同,不能用0和非0表示,整型和boolean型也不能互相转换。

5.附:为了改善数字多位的时候眼花,Java支持在数字中用下划线分隔如:a=100_000,即a = 100000。

二、数据类型转换

    Java是一种强类型语言,强类型体现在

  • 所有变量不许先声明,后使用。
  • 指定类型的变量只能接受该类型的赋值。
  • 相同类型直接才能进行运算和比较。

1. 自动转换

 由编译器自动完成的数据类型转化,按储存范围由小到大转换即:byte→short(char)→int→long→float→double,转换过程经常不会有精度损失。

[code]int a = 1;
double b = 2.0;
double c = a + b;
//这里编译器先将 a 转化为double型,再执行a + b;

【注】所有的基本类型都可以自动转化为String类型。 注意:

[code]System.out.println(3+4+"string");      //输出:7String
System.out.println(3 +(4 +"String"));    //输出:34string

2. 强制转换

转换方向与自动转换相反,需要程序员指定转化类型,转换过程经常有精度损失,语法格式为:(目标类型)变量;

[code]int a = 4;
double b = 2.3;
int c = a/(int)b;
//把b转换为int类型,即b = 2, 再进行运算,所以c = 2

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: