java数据类型初学者入门.docx
《java数据类型初学者入门.docx》由会员分享,可在线阅读,更多相关《java数据类型初学者入门.docx(14页珍藏版)》请在冰豆网上搜索。
java数据类型初学者入门
Java中有两种数据类型
基本数据类型
即int/char等这样的数值类型,共8种
引用类型
除了基本数据类型之外都是引用类型
包括API中的类,比如String、File
也包括自定义的类,如PersonalAccount,CreditAccount
包括数组,如int[],String[]
基本数据类型
8种基本数据类型
数据类型
位数
取值范围
说明
byte
8
-128~127
数据存储在内存中的最原始形态
short
16
-32768~32767
int
32
-231~231-1
long
64
-263~263-1
float
32
略
double
64
略
char
16
‘\u0000’~‘\uFFFF’
boolean
1
true/false
基本数据类型转换
程序中经常会遇到要将数据类型进行转换的情况(如:
在一个表达式中存在不同类型的操作数时),Java的数据类型转换比C控制得更为严格;
数据类型转换有两种情况:
自动类型转换
强制类型转换
自动类型转换
自动类型转换也称作隐式类型转换;
将一种类型的变量赋值给另一种类型的变量时,只要满足以下条件,就会发生自动类型转换
–两种类型之间相互兼容
–目标类型大于源类型(即类型提升)
如:
charch='A';
intnum=ch;
floatf=num;
doubled=f;
//类型转换自动发生,无需显式说明
类型提升规则
有类型提升的情况下,编译器将自动进行类型转换,否则就要进行强制类型转换;
类型提升应遵循如下规则:
两种类型必须兼容,且目标类型大于源类型,例如:
byte、char和short类型都可以提升为int型。
对于表达式而言,其最终结果将会与表达式中最高的数据类型相同。
强制类型转换
强制类型转换也称作显式类型转换;
如果被转换的值的数据类型大于其目标类型,将会丢失部分信息;
如:
intx=65;
charch=x;
这样的语句将报错,因为char类型精度低于int类型,编译器无法将其自动转换,只能进行强制转换:
intx=65;
charch=(char)x;
基本数据类型的扩展
System.out.println(Integer.MAX_VALUE);//打印最大整数:
2147483647
System.out.println(Integer.MIN_VALUE);//打印最小整数:
-2147483648
相应的浮点数:
System.out.println(Float.MAX_VALUE)
System.out.println(Float.MIN_VALUE)
双精度:
System.out.println(Double.MAX_VALUE)
System.out.println(Double.MIN_VALUE)
Float输出的有效位数为7位,总位数为8位?
为什么?
首先说一下:
范围是3.4E-38——3.4E+38,可提供7位有效数字。
上述这两个量都是近似值,各个编译器不太一样的。
下面我就将标准值是怎么定义的,和你说一下:
这个比较复杂,建议你找一下IEEE754标准看一下。
这个简单说一下吧:
在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。
float有32bit,double有64bit。
它们的构成包括符号位、指数位和尾数位。
这些位的构成如下:
种类-------符号位-------------指数位----------------尾数位----
float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)
double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)
取值范围主要看指数部分:
float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。
由于float的指数部分对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38—+3.4E38
精度(有效数字)主要看尾数位:
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
引用数据类型的定义
在Java中,除了上述基本数据类型的变量以外,其余的全都属于引用数据类型,
包括
•API中的类,如String、File等
•数组(后续学习)
•自定义的类,如Cars、Student
对象全部是引用数据类型
引用类型使用的场景与基本数据类型完全一样
作为属性的类型使用
作为方法的返回值类型使用
作为方法的形式参数类型使用
引用数据类型的赋值
引用类型都是对象,所以赋值都使用new调用构造方法进行赋值
例外:
String类可以直接使用=赋值,不使用new,后续详细学习
基本类型和引用类型的区别
基本数据类型
引用数据类型
概念
变量(单纯的值)
对象(引用)
存储位置
在栈中存值
在栈中存引用,在堆中存具体对象的属性值
赋值方式
直接赋值
new,String类和包装器类可以直接赋值
基本数据类型赋值
基本数据类型之间赋值,是将值进行拷贝
例:
intx=10;
inty=9;
x=y;
把y赋值给x,就是把9拷贝给x,x和y依然是两个内存地址,没有影响
引用类型的赋值都是通过new调用构造方法
例:
Studentstu1=newStudent(“Alice”,18);
Studentstu2=newStudent((“John”,17);
引用类型之间赋值,是虚地址之间的赋值
例:
stu1=stu2;stu2赋值给stu1,指的是把stu2的虚地址赋值给stu1,也就是二者将指向同一个实际对象John
==运算
在判断引用数据类型时判断的是地址,即虚地址一样才返回true
在判断基本数据类型时判断的是数值,即二进制一样才返回true
这里最好不要举String的例子,String比较特殊,有两种赋值方法,内存分配不同,后续学习。
可以创建Student类,创建两个对象,属性值完全相同,但是用==比较返回false。
说明比较的是虚地址。
另外,比较0.3==0.3f以及0.5==0.5f,理解==比较基本数据类型的原理
3java.lang包简介
java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类;
在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明。
String类
Java中,字符串是String类的对象;
Java中,String是引用数据类型;
可以通过使用String类提供的方法来完成对字符串的操作;
创建一个字符串对象之后,将不能更改构成字符串的字符;
每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内包含所做的修改,原始字符串保持不变。
Strings1=“abc”;
s1=“def”;
修改s1的内容时,并不是直接将abc修改为def,而是在新的内存空间存储了def这个字符串内容,原始的abc保持不变。
因此,String被称为不可变类。
String类的构造方法
String类的构造方法共有13种重载方式,以下是常用的几个:
String类构造方法示例
publicclassStringDemo
{
publicstaticvoidmain(String[]args)
{
char[]aryChar={‘I','C',‘S',‘S'};
Stringstr1=“ETC";
//利用一个字符串常量值创建新的字符串
Stringstr2=newString(“ICSSETC");
//利用一个字符型数组创建新的字符串
Stringstr3=newString(aryChar);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
可见,字符串除了使用new调用构造方法创建对象外,还可以使用=直接赋值。
正因为这点,很多初学者会把String类与int等同,作为基本数据类型看待。
实际上,String是一个引用类型。
字符串长度
String类中提供length成员方法,用来获得字符串的长度,方法原型:
intlength()
该方法返回字符串中有效字符的个数。
publicclassStringDemo
{
publicstaticvoidmain(String[]args)
{
Stringstr1="JohnSmith";
Stringstr2=newString("ILoveJava");
System.out.println(str1.length());
System.out.println(str2.length());
}
}
字符串比较
要判断两个字符串是否相等,可以使用“==”运算符和equals()方法,但是得到的结果可能不完全相同(String覆盖了Object类的equals方法);
==运算符用于比较两个引用是否指向同一个对象;
而equals()方法则是比较两个字符串中的内容是否相同,其原型:
booleanequals(ObjectanObject)
如果相等返回true,否则返回false。
其中覆盖equals方法可以在继承中再学习强调,此处只需要知道String可以调用equals方法即可
为了提高性能,JAVA在创建字符串时提供了有限制的池操作
publicstaticvoidmain(String[]args){
Stringstr1="123";
Stringstr2="123“;
System.out.println(str1==str2);
Stringstr3="234";
Stringstr4=newString("234");
System.out.println(str3==str4);
}
字符串比较示例
publicclassStringDemo{
publicstaticvoidmain(String[]args){
Stringstr1=“ICSS",str2=“ICSS";
Stringstr3=newString(“ETC"),str4=newString(“ETC");
if(str1==str2){
System.out.println("str1和str2指向同一字符串");}
else{
System.out.println("str1和str2分别指向不同字符串");}
if(str1.equals(str2)){
System.out.println("str1和str2的内容完全相同");}
else{
System.out.println("str1和str2的内容不相同");}
if(str3==str4){
System.out.println("str3和str4指向同一字符串");}
else{
System.out.println("str3和str4分别指向不同字符串");}
if(str3.equals(str4)){
System.out.println("str3和str4的内容完全相同");}
else{
System.out.println("str3和str4的内容不相同");}
}
}
充分了解用=为字符串赋值以及用new对字符串赋值的区别
=赋值是从实例池中查找,如果有相同内容的,即引用使用,否则就初始化并存储到实例池。
而new赋值,不管内容是否相同,都初始化一个新的字符串
字符串其它的比较方法
注意,字符串比较大小,即比较它们的字典顺序,不能使用><比较,而是使用compareTo方法。
字符串搜索
如果需要搜索某个字符(或某个子串)在字符串中是否出现过,这就要使用到indexOf方法和lastIndexOf方法。
字符串搜索示例
publicclassStringDemo
{
publicstaticvoidmain(String[]args)
{
StringstrEmail="java@";
intindex;
System.out.println("E-mail地址:
"+strEmail);
index=strEmail.indexOf('@');
System.out.println("@字符出现的索引:
"+index);
index=strEmail.indexOf("sun");
System.out.println("字符串\"sun\"出现的索引:
"+index);
index=strEmail.lastIndexOf('a');
System.out.println("a字符最后一次出现的索引:
"+index);
}
}
提取字符串
publicclassStringDemo
{
publicstaticvoidmain(String[]args)
{
Stringstr1="JavaisOOP";
Stringstr2=newString(“icss");
System.out.println(str1.charAt
(2));
System.out.println(str1.substring(5));
System.out.println(str1.substring(2,9));
System.out.println(str1.concat(str2));
System.out.println(str1+str2);
System.out.println(str1.replace('a','e'));
System.out.println(str1.trim());
}
}
更改字符串的大小写形式
有时候,我们需要将字符串中字符的大小写形式进行转换。
更改大小写形式示例
publicclassStringDemo
{
publicstaticvoidmain(String[]args)
{
Stringstr1="JavaisOOP";
Stringstr2;
str2=str1.toLowerCase();
System.out.println(str2);
str2=str1.toUpperCase();
System.out.println(str2);
}
}
数据格式转化
在某些特定的场合,我们可能需要将字符串转化成其它格式的数据进行操作;