在Java中所有的基本类型都有类类型,比如int的类类型是Integer,这种类就叫做封装类。
我们可以把一个基本类型的数据转化为封装类,同样也可以把一个封装类类型转化为基本数据类型,这种相互之间的转化又称为装箱和拆箱。我们可以通过一个例子来看一下:
public class TestNumber {
public static void main(String[] args) {
int c =1;
//基本类型转化为封装类型
Integer i = new Integer(c);
Integer i2 = c;//装箱的过程
//封装类型转化为基本类型
int d = i.intValue();
int d2 = i;//拆箱的过程
System.out.println(i.intValue());
System.out.println(d);
}
}
其中,对于封装类我们需要注意的是Byte,Short,Integer,Long,Float,Double 的封装类都是Number的子类。
接下来我们看一下如何把字符串转化为数字以及如何把数字转化为字符串,eg:
public class TestNumber {
public static void main(String[] args) {
//把数字转化为字符串
int a =10;
//通过valueOf()方法
String str1 = String.valueOf(a);
Integer i = a;//通过toString方法
String str2 = i.toString();
//把字符串转化为数字
String str3 = "123";
int b = Integer.parseInt(str3);
}
}
格式化输出一般%d用来表示数字,%s用来表示字符串,%n用来表示换行。
printf和format方法表示一样的格式。我们通过查看源码可以发现在printf中调用了format方法。
关于字符串我们首先需要创建字符串,如:string str = ''abssfgf'';对于字符串来说有很多方法,其中最常见的是:
charAt() | 获取字符 |
toCharArray() | 获取对应的字符数组 |
subString | 截取子字符串 |
split() | 分隔 |
trim() | 去掉首位字符 |
toLowerCase toUpperCase | 大小写 |
indexOf lastIndexOf contains | 定位 |
replaceAll replaceFirst | 替换 |
关于上表中常见的上表中的方法的练习如下面的一段代码实例:
public static void main(String[] args) {
//获取指定位置的字符(第二位)
String str = "HelloWorld!";
char cha = str.charAt(2);
System.out.println(cha);
//获取对应的字符数组
char[] arr = str.toCharArray();
System.out.println(arr.length+"\t"+str.length());
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+"\t");
}
//截取自字符串
String str2 = str.substring(0, 5);//左闭右开
System.out.println("\n截取过后的字符串是:"+str2);
//根据指定的分隔符进行分隔
String st = "中国,一个历史悠久的国家,强大,温馨,和谐,民主";
String[] sb = st.split(",");
for(String s:sb) {
System.out.print(s+"\t");
}
//去掉空格
String str3 = " sdgdssgdfg ";
System.out.println("\n"+str3.trim());
//大小写进行替换
String str4 = "stringGataBoy";
System.out.println("\n"+str4.toLowerCase());
System.out.println("\n"+str4.toUpperCase());
//定位:字符或者字符串出现的位置,或者是否包含字符串
String str5 = "nihaoyashijie";
System.out.println(str5.indexOf('n'));
System.out.println(str5.indexOf("hao"));
System.out.println(str5.contains("shi"));
//替换:如果字符串出现了重复的,我们想要进行全部替换和部分替换
String str6 = "采菊东篱下,悠然见南山,南山不相见,相见欲还休";
System.out.println(str6.replaceAll("南山", "北海"));
System.out.println(str6.replaceFirst("南山", "西山"));
}
在字符串中还有最常用到的就是比较“==”以及"equals"的使用
一般情况下:==用来比较是否是同一实例对象,equals用来比较内容是否相等。
下面让我们通过实例来看一下他们两个的区别:
public class Test{
public static void main(String[] args){
String str1 = "nihaojava";
String str2 = "nihaojava";
String str3 = new String(str1);;
System.out.println(str1==str2);//true
System.out.println(str3==str1);//false
System.out.println(str3.equals(str1));//true
}
}
我们可以看出来在str1和str2中,我们的两个字符串内容是相等的,当我们str1中有内容之后,str2再去赋值,会先看之前是不是存在相同的字符串,如果有的话则直接拿过来用,如果不存在再进行新的值的创建。在str3和str1进行比较的时候,我们发现str3是通过new新开辟的一个空间,重新new了一个对象,所以和之间的str1是不相等的,所以在时候“==”的时候返回的是false值,但是他们的值是相等的,所以在str3.equals(str1)的时候返回的是true值;
在字符串中还有一种叫做可变的字符串Stringbuffer;常用的方法有append delete insert reverse
public class Test{
public static void main(String[] args){
String str1 = "nihaojava";
StringBuffer sb = new StringBuffer(str1);
//追加
sb.append("PYTHON");
System.out.println(sb);
//删除
sb.delete(1, 2);//左闭右开
System.out.println(sb);
//插入
sb.insert(1, "Threr");
System.out.println(sb);
//反转
sb.reverse();
System.out.println(sb);
}
}
在Stringbuffer这个字符数组中一般留有数组的冗余程度,所以在一般的使用过程中,我们会感觉它变长了,其实是因为留有冗余长度的原因。