您的位置:首页 > 职场人生

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

2014-12-12 18:47 295 查看
-------
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类的特点:

字符串数据一旦初始化就不可以被该变只能改变变量的指向。

字符串对象(字符串常量)都存储在常量池中,在方法区中开辟空间,专门存储常量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐