------- android培训、java培训、期待与您交流! ----------
【基本数据类型】:变量名指向具体的数值 ,一般通过比如int a = 5;来定义。
【引用数据类型】:变量名指向存数据对象的内存地址,即变量名指向hash值,一般通过new 关键字来创建。
┏数值型━┳━整数型:byte short int long┏基本数据类型━━┫ ┗━浮点型:float double
┃ ┣字符型:char
数据类型 ┗布尔型:boolean
┃ ┏类(class)
┗引用数据类型━━╋接口(interface)
┗数组(array)
想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象。
如:System.out.println("int max:"+Integer.MAX_VALUE);
八种基本数据类型的包装类byte ——Byte
short ——Short
int ——Integer
long-----Long
float-----Float
double----Double
char----Character
boolean---Boolean
转换
基本数据类型和字符串之间的转换。基本数据类型转换为字符串
方法 1. 基本数据类型+""
2. 基本数据类型.toString(基本数据类型值);
如:Integer.toString(110);//将110整数变成"34";
字符串转换成基本数据类型(如需对数字进行比较时)公式:基本数据类型 变量名 = 基本数据类型包装类.parseXxx(XxxString);
在八个基本类型对象包装类中只有一个对象没有parse方法,就是Character.
方法 1. ① 静态调用方式 基本数据类型.parseInt("数字格式的字符串");
如:int num = Integer.parseInt("110");
② 对象调用方式 Integer i = new Integer("110");
如:int num = i.intValue();
2. Boolean b = Boolean.parseBoolean("false");//将字符"false"转换为布尔型
进制间的转换
十进制转成其他进制:toBinaryString();//转换为二进制toHexString();//转换为十六进制
toOctalString();//转换为八进制
其他进制转化成十进制:parseInt(String,radix);
int转换成char:
int n = 1;
char ch = (char)(n + '0');
这样打印出来ch的值为1;
不过需要注意(因为char只有一个字节),此处的n只能是0-9之间的字符
char转换成Int:
char ch = '9';
intn = int(ch) - int('0');
此处ch也是‘0’至‘9’的数字字符
集合类到数组的转换
直接的做法就是循环遍历复制一下。
集合类有支持转换的方法,用起来更方便。、
List<Long> roomStatusIds = new ArrayList<Long>();
Long[] statusIds = (Long[]) roomStatusIds.toArray(new Long[roomStatusIds.size()]);
toArray也有不带参数的方法,这样放回的是Object[],但如果再将Object[]强行转换为Long[]会出错。使用toArray(T[] array)这种方式,通过泛型可以运行时再确定返回参数的类型。
数组转集合
String[] array = new String[3];
List<String> list = Arrays.asList(array);
如果是 “字符串数组” 转 “字符串”,只能通过循环,没有其它方法
String[] str = {"abc", "bcd", "def"};
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length; i++){
sb. append(str[i]);
}
String s = sb.toString();
如果是 “字符数组” 转 “字符串” 可以通过下边的方法
char[] data={'a','b','c'};
String s=new String(data);
Java数组转字符串
方法1:直接在构造String时转换。
char[] data = {'a', 'b', 'c'};
String str = new String(data);
方法2:调用String类的方法转换。
String.valueOf(char[] ch)
比较两个被封装成了对象的数:
① 基本数据类型的比较用比较运算符。② 引用数据类型使用compareTo
在数值上比较两个Integer对象。以返回0、正数、负数来判断两个数的大小。
Integer a = new Integer(2);
Integer b = new Integer(5);
System.out.println(a.compareTo(b));
对象想要进行比较,必须通过方法来完成,这个方法就是compareTo
而很多对象都可以进行比较。所以这个方法定义在Comparable接口中。
想要对象具备比较功能,只要实现Comparable接口。
关于自动装箱
class Interger
{
public static void main(String[] args)
{
Integer s1 = new Integer("123");
Integer s2 = new Integer(123);
Integer s3 = 4;//自动装箱 1.5版本新特性:s3为引用数据类型(类类型变量)4视为一个对象:new Integer(4);
s3 = s3+2;
//s3进行自动拆箱,转化为int类型,计算和2相加,再自动装箱赋给s3
//但当s3 = null 此计算不成立,会抛空指针异常。简化就有弊端:自动装箱拆箱时,要进行null的健壮性判断。
System.out.println(s1.equals(s2));//true Integer 复写了object类中的equals方法,来比较2个数值是否相等
Integer s4= 127;
Integer s5= 127;
System.out.println(s4==s5);//ture
//如果数值在byte类型范围内(-128 ~ 127)。如果该对象数值重复出现多个引用其实是指向同一个Integer对象,
//好处:节省空间!但是如果超出了byte范围,就会生产新的Integer对象。
}
}
首先看几个示例:
System.out.println('a'+1);//98
System.out.println(“”+'a'+1);//a1
System.out.println("abc"+3+2); // abc32
System.out.println(3+2+"abc"); //5abc
小结:①若输出语句中出现字符与数字相加:则会将字符自动转换为对应的数值然后再与数字进行计算
②若是字符串与数字相加:则会是一个链接字符串效果。
③若是两个数字在前面:则会先计算数字的和再与字符串相连。
关于"=="和equals
1. ==前后如果是基本数据类型,则是比较值是否相等;如果是引用数据类型则比较的是地址值是否相同
2. equal方法比较的是什么,得看equals如何定义的,object类中定义的equals跟==一样,但比如定义在String中的equals方法
则是用来比较数值是否相等。在TreeSet、HashSet中,还可以复写equals方法进行自定义排序。
关于String
PS这里为了方便查阅,将打印语句写到定义的对象旁了
class stringdemo
{
public static void main(String[] args)
{
String s1 = "abc";//这里的s1是一个类类型的变量,"abc"代表一个对象
s1="abcd";//s1在内存中指向了“abcd”
System.out.println(s1);//打印结果abcd 字符串在内存中没有改变,只是s1指向了abcd
String s2 = new String("abcd");//代表2个对象①new出的对象②传入的对象“abcd”
System.out.println(s1.equals(s2));//ture 在object中equals比较地址值但在String类中复写了equals方法比较字符串
String s3 = new String("abcd");
System.out.println(s1==s3);//false
System.out.println(s1==s2);//false s1和s2是2个不同的对象而这里==只能比较同一个对象
String s4 = "abcd";
System.out.println(s1==s4);//true 原因abcd在常量池中已经有了地址值,String s4 也指向了“abcd”
String s5 = "abc";
System.out.println(s1==s5);//false 验证了第一个s1已经由在内存中由指向“abc”转为指向“abcd”
String s6 = s5.replace('a','z');//zbc
System.out.println(s6);
//替换此时返回的是一个新的字符串,因为字符串一旦初始化就不能被改变
//如果要替换的字符串不存在,那么返回的还是原来的字符串。String s6 = s5.replace('n','z');
String s7 = "zhangsan,lisi,wangwu";
String[] arr = s7.split(",");//切割
for (int x = 0;x<arr.length ;x++ )
{
System.out.print("arr["+x+"]="+arr[x]);//arr[0]=zhangs;aarr[1]=lisi;arr[2]=wangwu
}
}
}
字符串的创建方式:
String str = "abcd";在常量池中创建一个字符串对象,存放于 常量池;
String t1 = new String("abcd");一共有2个对象:在堆内存中创建 String类的对象,并在常量池中创建了“abcd"对象。
String类的特点:
字符串数据一旦初始化就不可以被该变只能改变变量的指向。
字符串对象(字符串常量)都存储在常量池中,在方法区中开辟空间,专门存储常量。