黑马程序员_java_数据类型及基本数据类型包装类

------- 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类:
字符串的创建方式:
String str = "abcd";在常量池中创建一个字符串对象,存放于 常量池;
String t1 = new String("abcd");一共有2个对象:在堆内存中创建 String类的对象,并在常量池中创建了“abcd"对象。
String类的特点:
字符串数据一旦初始化就不可以被该变只能改变变量的指向。

字符串对象(字符串常量)都存储在常量池中,在方法区中开辟空间,专门存储常量。           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值