java的基本数据类型-阿里云开发者社区

开发者社区> 开发与运维> 正文

java的基本数据类型

简介: java的基本数据类型常量和变量   Java常量:用文本串表示,可以区分为不同类型   整数常量123 实数常量2.12  字符常量‘c’   逻辑常量true false   字符串常量  “hello” 常量:在程序运行期间其值保持不变的变量。
java的基本数据类型

常量和变量
  Java常量:用文本串表示,可以区分为不同类型
  整数常量123 实数常量2.12

  字符常量‘c’
  逻辑常量true false
  字符串常量  “hello

常量:在程序运行期间其值保持不变的变量。
  final定义常量——用符号表示常量
  final double PI = 3.14159; // PI是实数类型常量

变量

  定义:值在运行时可以改变的量
  每个变量属于特定的数据类型,使用前要先声明,然后赋值,然后才能使用
    变量的定义和初始化         int x = 9;
    变量有一个名字,在内存中占存储单元,存储单元中存放变量的值(区分变量的名和变量的值)
 
数据类型
(1)整数类型
  特点:无小数部分;允许负数   byte、short、int、long(L)
    Java:整数的范围与Java代码所在机器无关
    Java中整数类型的三种表示形式:
      十进制整数:如,2,-6;
      八进制整数:以0开头,如02;
      十六进制整数:以0x开头,如Ox5317
  注意:这里没有二进制!!!

(2)字符类型
   用‘’表示字符常量
    char c1 = ‘a’;   char c2 = ‘人’
  char :16位;使用Unicode编码
  可用十六进制编码形式表示
    5317 4EAC 6B22 8FCE 4F60 (16进制)
    使用‘\’将其后的字符转换成其他含义
      ‘\n’表示回车;
      ‘\u5317’代表编码为5317 (16进制)的字符:‘北’
System.out.print('\u5317');
System.out.print('\u4eaC');
System.out.print('\u6B22');
System.out.print('\u8FCE');
System.out.print('\u4F60');
//输出:北京欢迎你
  区分字符和字符串

(3)浮点类型
  Java中的实数类型 float(4字节)、double(8字节,双精度)
  两种表示方法:
    十进制形式  如3.14,.314   314.0
    科学计数法,如:5e-3F
  默认为double型,若声明一个float型,需要在数字后面加上f或F
    double a = 12.3;       float f = 12.3f;
float f = 12.3;
System.out.println(f);//错误!提示精度缺失!
//java中12.3默认我double类型。将其赋值给float类型的变量f,可能造成ing度缺失,所以报错!!!

double pi = 3.1415926;
int p = (int)pi;
System.out.println(p);//p=3
  注意:计算机中无法精确表示实数

(4)布尔类型 boolean
    用于判断逻辑,包含:false和true
    注意:只能取true和false,不能以0或非0整数来代替
 

(5)基本类型数据之间的转换
<1>类型的兼容转换
float f = 1.0f;
double d = f;
<2>强制类型转换: (类型指示符)表达式
            double pi = 3.1415926;
            int p = (int)pi;//p=3
转换规则:
基本数据类型转换规则小结
  容量小的转换成容量大的(隐式的自动转换)
    byte short char->int->long->float->double
    byte short char互相之间不转换,用时全部转换成int类型
  容量大的类型转换成容量小的类型时,要加强制转换符,但可能降低精度或造成溢出
  多种类型混合运算时,系统自动将所有类型转换成容量最大的类型,再进行计算
  对于一个整数,编译器当作int型(默认)
  对于一个小数,编译器当作double型(默认)
  boolean类型和其他类型不能互相转换
 
数据类型大小、范围、默认值如下:
数据类型            大小(位)       范围                                                 默认值 

byte(字节) 8 -128 - 127 0
shot(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’ 使用的Unicode值  表示的,格式是‘\uXXXX’。XXXX表示一个十六进制的整数。如:‘A’、‘9’、‘0’等。
boolean(布尔型) 1 true/false false

实例:
int i1 = 123; 
int i2 = 456;
double d1 = (i1+i2)*1.2;//系统将转换为double型运算

float f1 = (float)((i1+i2)*1.2);//需要加强制转换符

byte b1 = 1; //整形常量赋值且未超出范围,可以直接赋值

byte b2 = 2;//整形常量赋值且未超出范围,可以直接赋值

byte b3 = b1+b2;//错误!!!!系统将转换为int型运算,需要强制转换符改为(byte) (b1+b2);

System.out.println(b3);
double d2 = 1e200;
float f2 = (float)d2;//会产生溢出

System.out.println(f2);

 float f3 = 1.23;//错误!!!要换成1.23f
 long l1 = 123;
 long l2 = 30000000000;//错误!!!数制超出了int的范围,必须加L
 float f = l1+l2+f3;//系统将转换为float型计算

 long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)

  

原码+补码+反码
原码:本身的值。
原码符号位不变->其他位取反,得到反码->再加1 得到补码。

补码减1,得到反码->反码符号位不变,其他位按位取反 ->得到原码。


需要注意的事项:
double d1=1/3;//这里d1的值是0
1/3是两个整数相除,首先做的是整数运算,结果是0。直接赋给d1,所以d1=0;
需要做如下修改就可以:
public class Test
{
	public static void main(String[] args)
	{
		double d1=1/3;
		System.out.println(d1);
		
		double d2=1/3d;
		System.out.println(d2);
	}
}
结果:

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章