当前位置 博文首页 > 是琳琳呀!的博客:JAVA数据类型的秘密
JAVA数据类型
1:变量与类型
1.变量指的是程序运行是可变的量,相当于开辟了一块内存空间来保存一些数据。
2.类型则是对变量的种类进行的划分,不同的类型的变量具有不同的特性。
3.变量主要和我们的内存这样的硬件密切相关:
CPU
冯诺依曼体系
其中输入设备就包括我们的键盘,麦克风等等;输出设备就是屏幕音响等。
4.一个Java程序的运行包括这几步:
JVM与JDK,JRE的关系:
JDK的命令有:
JDK常用的一般就2个命令java和javac:
1、javac命令,是编译java代码生成class文件;
2、java命令,是运行java编译好的代码,让程序正常运行。
3.javadoc:根据 Java 源代码及其说明语句生成的 HTML 文档。
4.jdb:Java 调试器,可以逐行地执行程序、设置断点和检查变量。
5:标识符:
标识符主要包括:类名,方法名,变量名,接口名,变量名
规则:1.以数字,下划线,字母,美元符号组成;
2,不能以数字开头;严格区分大小写;
3.不能以关键字做标识符。
建议:1:见名思意
2.不以下划线开头;
3.驼峰命名分(类名,接口名:首字母大写,后面每个单词首字母大写,(大驼峰)变量名,方法名:首字母小写后面每个字母大写(小驼峰),常量名:全部大写)
6:数据结构:
数据结构类型
基本类型 引用类型
整数类型:byte short 字符串类型:String
int long
浮点类型:double float 数组
字符类型:char 接口
布尔类型:boolean 类
(1):整形变量:(4个字节,不分平台,包装类Integer)
基本语法格式:int 变量名 =初始值;
实例:int num=10;(创建变量的时候设置初始值)
System.out.println(num);//10
(int a,b,c=10;这里只给c赋了初始值)
注:JAVA没有无符号类型,int既可以表示正数,也可以表示负数。
可使用System.out.println(Integer.Max_VALUE);//检查最大值
System.out.println(Integer.Min_VALUE);//检查最小值
如果运算结果超出int的范围,就会出现溢出的情况(报错)
但是这种情况:
int maxValue=Integer.MAX_VALUE;
System.out.println(maxValue+1);//-2147483648
(2)长整型变量(8个字节,不分平台,包装类Long)
基本语法格式:long 变量名=初始值;
实例:long num=10L;(创建变量的时候设置初始值)
System.out.println(num);//10
可使用System.out.println(Long.Max_VALUE);//检查最大值
System.out.println(Long.Min_VALUE);//检查最小值
如果运算结果超出long的范围,就会出现溢出的情况(报错)
一般int类型在大工程中不够使用,long一般就可满足。
(3)双精度浮点类型变量(8个字节,不分平台,包装类Double)
基本语法格式:double 变量名=初始值;
实例:double num=10.2;(创建变量的时候设置初始值)
System.out.println(num);//10.2
一般folat类型在大工程中不够使用,double一般就可满足(数据丢失)
double a=1.1;
System.out.println(a*a);//1.2100000000000002(精度误差)
浮点数的内存布局与整数差别很大,不能单纯的用2的多少次方来表示数据范围
注:
int a=1;
int b=2;
System.out.println(a/b);//0
double a=1;
double b=2;
System.out.println(a/b);//0.5
(4)单精度浮点类型变量(4个字节,不分平台,包装类Float)
基本语法格式:float 变量名=初始值;
实例:float num=10.2F;(创建变量的时候设置初始值,加F或f后缀不加默认double类型)
System.out.println(num);//10.2
(5)字符类型变量(2个字节,不分平台,包装类Character)
基本语法格式:char 变量名=‘初始值’;
实例:char ch=‘a’;(创建变量的时候设置初始值)
System.out.println(ch);//a
可使用System.out.println(Character.Max_VALUE);//检查最大值
System.out.println(Character.Min_VALUE);//检查最小值
如果运算结果超出char的范围,就会出现溢出的情况
注:因为字符类型占两个字节故可以使用一个字符表示一个汉字(一个汉字两个字节,使用Unicode码表示字符)
在执行Javac的时候可能会出现以下错误:
Test.java:3:错误:未结束的字符文字
此时我们在执行javac时加上-encoding UFT-8选项即可
Javac -encoding UFT-8 Test.java
(6)字节类型变量(1个字节,不分平台,包装类Byte)
基本语法格式:byte 变量名=初始值;
实例:byte num=1;(创建变量的时候设置初始值)
System.out.println(num);//1
可使用System.out.println(Byte.Max_VALUE);//检查最大值
System.out.println(Byte.Min_VALUE);//检查最小值
(7)短整型变量(1个字节,不分平台,包装类Short)
基本语法格式:short 变量名=初始值;
实例:short num=1;(创建变量的时候设置初始值)
System.out.println(num);//1
可使用System.out.println(Short.Max_VALUE);//检查最大值
System.out.println(Short.Min_VALUE);//检查最小值
(9)布尔类型变量(没有明确规定一个字节或者一个比特位,包装类Boolean)
基本语法格式:Boolean 变量名=初始值;
实例:short value=true;(创建变量的时候设置true真,false假)
System.out.println(value);//true
注:JAVA中没有1是true,0是false的表示,不能进行类型转换
boolean value=true;
System.out.println(value+1);//报错
Error:(6, 33) java: 二元运算符 ‘+’ 的操作数类型错误
第一个类型: boolean
第二个类型: int
(8)字符串类型变量(引用类型)
基本语法格式:String 变量名=“初始值”;
实例:String name=“hello”;
System.out.println(name);//hello
字符串的加操作:
String name=“hello”;
int a=1;
System.out.println(name+a);//hello1
任何类型的数据和字符串使用“+”拼接,其结果就是一个字符串。
注:转义字符:
\n 换行 \ \反斜杠
\” “一个双引号 \’ ‘一个单引号
String name="\“hello\”";
System.out.println(name);//“hello”
7.变量的作用域:
也就是说该变量生效的范围,一般是变量定义在所在的代码块中(大括号)
public class Test {
public static void main(String[] args) {
String name="\“hello\”";
System.out.println(name);//可运行
}
System.out.println(name);//不可运行,找不到变量
}
8:常量:
常量指的是运行时类型不能发生改变。
(1)字面值常量(10十进制,1.0,1.0F,10L,0X10十六进制,010八进制,true,’a,”hello”)
(2)final关键字修饰的常量(赋一次值后不能改变)
final int a = 10;
a = 20;//编译出错,无法为最终变量a分配值
9:类型转换:
(1)int–>long/double
int a=10;
long b=20L;/double=10.2
a=b;//编译错误,损失精度
b=a;//编译通过
不同的数字类型得变量之间赋值,表示范围更小的类型能隐式转变成范围较大的类型,反之不行。
(2)int–>boolean
这种不能进行转换,boolean是一种不同的类型,不能相互赋值。
(3)int–>byte
byte a=100;//通过
byte b=256;//报错,从int转化为byte可能会有损失。(byte的范围-128–127)
(4)int–>String
int num=10;
1.String str1=num+“”;
2.String str2=String.valueof(num);
(5)String–>int
String str =“100”;
int num=Integer.parseInt(str);
(6)强制类型转换
int a=1;
double b=10.5;
a=(int)b;//编译通过a=10
int a=10;
boolean b=true;
b=(boolean)a;//报错,不兼容
强制类型转换可能会造成数据的精度的丢失,强制转换不一定能成功,互不相干的类型就不可以。
10.数值提升:
(1)不同类型的数据混合运算,范围小的会提升成范围大的。
(2)对于short,byte这种比四个字节小的类型,会先提升成四个字节的int,在运算
如:byte a=10;
byte b=20;
byte c=a+b;//不兼容,报错
应改为:byte c=(byte)(a+b);
或者 int c =a+b;