你需要的是什么,直接评论留言。
分享是一种美德,分享更快乐!
1:stringbuffer(掌握)
(1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,java就提供了
一个字符串缓冲区类。stringbuffer供我们使用。
(2)stringbuffer的构造方法
a:stringbuffer()
b:stringbuffer(int size)
c:stringbuffer(string str)
/*
* 线程安全(多线程讲解)
* 安全 -- 同步 -- 数据是安全的
* 不安全 -- 不同步 -- 效率高一些
* 安全和效率问题是永远困扰我们的问题。
* 安全:医院的网站,银行网站
* 效率:新闻网站,论坛之类的
*
* stringbuffer:
* 线程安全的可变字符串。
* stringbuffer和string的区别?
* 前者长度和内容可变,后者不可变。
* 如果使用前者做字符串的拼接,不会浪费太多的资源。
* stringbuffer的构造方法:
* public stringbuffer() :无参构造方法 初始化一个默认容量的字符串缓冲区对象
*public stringbuffer(int capacity):
初始化具有一个指定容量的字符串缓冲区对象
*public stringbuffer(string str) : 初始化一个具有初始化值(指定)的字符串内容的字符串缓冲区对象
*
* stringbuffer的方法:
*public int capacity():返回当前容量。理论值
*public int length() :返回长度(字符数)。 实际值
*/
public class stringbufferdemo {
public static void main(string[] args) {
// public stringbuffer():无参构造方法
stringbuffer sb = new stringbuffer();
system.out.println("sb:" + sb);
system.out.println("sb.capacity():" + sb.capacity());
system.out.println("sb.length():" + sb.length());
system.out.println("--------------------------");
// public stringbuffer(int capacity):指定容量的字符串缓冲区对象
stringbuffer sb2 = new stringbuffer(50);
system.out.println("sb2:" + sb2);
system.out.println("sb2.capacity():" + sb2.capacity());
system.out.println("sb2.length():" + sb2.length());
// public stringbuffer(string str):指定字符串内容的字符串缓冲区对象
stringbuffer sb3 = new stringbuffer("hello");
system.out.println("sb3:" + sb3);
system.out.println("sb3.capacity():" + sb3.capacity());
system.out.println("sb3.length():" + sb3.length());
}
(3)stringbuffer的常见功能(自己补齐方法的声明和方法的解释)
a:添加功能
* stringbuffer的添加功能:
* public stringbuffer append(string str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
* public stringbuffer insert(int offset,string str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
*/ 添加在offset前面。
// 创建字符串缓冲区对象
// public stringbuffer append(string str)
// stringbuffer sb2 = sb.append("hello");
// system.out.println("sb:" + sb);
// system.out.println("sb2:" + sb2);
// system.out.println(sb == sb2); // true
// 一步一步的添加数据
// sb.append("hello");
// sb.append(true);
// sb.append(12);
// sb.append(34.56);
// 链式编程
sb.append("hello").append(true).append(12).append(34.56);
// public stringbuffer insert(int offset,string
// str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
sb.insert(5, "world");
b:删除功能
* stringbuffer的删除功能
* public stringbuffer deletecharat(int index) :删除指定位置的字符,并返回本身
* public stringbuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,不包含结束位置内容,并返回本身
// 创建对象
// 添加功能
sb.append("hello").append("world").append("java");
// public stringbuffer deletecharat(int index):删除指定位置的字符,并返回本身
// 需求:我要删除e这个字符,肿么办?
// sb.deletecharat(1);
// 需求:我要删除第一个l这个字符,肿么办?
// public stringbuffer delete(int start,int
// end):删除从指定位置开始指定位置结束的内容,并返回本身
// 需求:我要删除world这个字符串,肿么办?
// sb.delete(5, 10);
// 需求:我要删除所有的数据
sb.delete(0, sb.length());
c:替换功能
* stringbuffer的替换功能:
* public stringbuffer replace(int start,int end,string str)
*:从start位置开始到end位置对应的字符串用str这个字符串替换返回字符串缓冲区本身,不包含end位置对应的字符
// 添加数据
sb.append("hello");
sb.append("world");
sb.append("java");
// public stringbuffer replace(int start,int end,string
// str):从start开始到end用str替换
// 需求:我要把world这个数据替换为"节日快乐"
sb.replace(5, 10, "节日快乐");
d:反转功能
//public stringbuffer reverse() 返回字符串本身
* stringbuffer的反转功能:
* public stringbuffer reverse()
sb.append("霞青林爱我");
// public stringbuffer reverse()
sb.reverse();
e:截取功能(注意这个返回值)
* stringbuffer的截取功能:注意返回值类型不再是stringbuffer本身了
* public string substring(int start) 截取从start开始到末尾,返回的是被截取到的字符
* public string substring(int start,int end) 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置;
// 添加元素
// 截取功能
// public string substring(int start)
string s = sb.substring(5);
system.out.println("s:" + s);
// public string substring(int start,int end)
string ss = sb.substring(5, 10);
system.out.println("ss:" + ss);
(4)stringbuffer的练习(做一遍)
a:string和stringbuffer相互转换
string -- stringbuffer
构造方法 append方法
stringbuffer -- string
建议:tostring()方法
* 为什么我们要讲解类之间的转换: 其实是想使用stringbuffer中特有的功能
* a -- b的转换
* 我们把a转换为b,其实是为了使用b的功能。
* b -- a的转换
* 我们可能要的结果是a类型,所以还得转回来。
* string和stringbuffer的相互转换?
public class stringbuffertest {
// string -- stringbuffer
string s = "hello";
// 注意:不能把字符串的值直接赋值给stringbuffer
// stringbuffer sb = "hello";
// stringbuffer sb = s;
// 方式1:通过构造方法
stringbuffer sb = new stringbuffer(s);
// 方式2:通过append()方法
stringbuffer sb2 = new stringbuffer();
sb2.append(s);
system.out.println("---------------");
// stringbuffer -- string
stringbuffer buffer = new stringbuffer("java");
// string(stringbuffer buffer)
string str = new string(buffer);
// 方式2:通过tostring()方法
string str2 = buffer.tostring();
system.out.println("str:" + str);
system.out.println("str2:" + str2);
b:字符串的拼接
* 把数组拼接成一个字符串
public class stringbuffertest2 {
// 定义一个数组
int[] arr = { 44, 33, 55, 11, 22 };
// 定义功能
// 方式1:用string做拼接的方式
string s1 = arraytostring(arr);
system.out.println("s1:" + s1);
// 方式2:用stringbuffer做拼接的方式
string s2 = arraytostring2(arr);
system.out.println("s2:" + s2);
// 用stringbuffer做拼接的方式
public static string arraytostring2(int[] arr) {
sb.append("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
sb.append(arr[x]);
} else {
sb.append(arr[x]).append(", ");
sb.append("]");
return sb.tostring();
// 用string做拼接的方式
public static string arraytostring(int[] arr) {
string s = "";
s += "[";
s += arr[x];
s += ", ";
s += "]";
return s;
c:把字符串反转
import java.util.scanner;
* 把字符串反转
public class stringbuffertest3 {
// 键盘录入数据
scanner sc = new scanner(system.in);
system.out.println("请输入数据:");
string s = sc.nextline();
// 方式1:用string做拼接
string s1 = myreverse(s);
// 方式2:用stringbuffer的reverse()功能
string s2 = myreverse2(s);
// 用stringbuffer的reverse()功能
public static string myreverse2(string s) {
// stringbuffer sb = new stringbuffer();
// sb.append(s);
// stringbuffer sb = new stringbuffer(s);
// sb.reverse();
// return sb.tostring();
// 简易版
return new stringbuffer(s).reverse().tostring();
// 用string做拼接
public static string myreverse(string s) {
string result = "";
char[] chs = s.tochararray();
for (int x = chs.length - 1; x >= 0; x--) {
// char ch = chs[x];
// result += ch;
result += chs[x];
return result;
d:判断一个字符串是否对称
* 判断一个字符串是否是对称字符串
* 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
* 分析:
* 判断一个字符串是否是对称的字符串,我只需要把
* 第一个和最后一个比较
* 第二个和倒数第二个比较
* ...
* 比较的次数是长度除以2。
public class stringbuffertest4 {
// 创建键盘录入对象
system.out.println("请输入一个字符串:");
// 一个一个的比较
boolean b = issame(s);
system.out.println("b:" + b);
//用字符串缓冲区的反转功能
boolean b2 = issame2(s);
system.out.println("b2:"+b2);
public static boolean issame2(string s) {
return new stringbuffer(s).reverse().tostring().equals(s);
// public static boolean issame(string s) {
// // 把字符串转成字符数组
// char[] chs = s.tochararray();
//
// for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
// if (chs[start] != chs[end]) {
// return false;
// }
// return true;
public static boolean issame(string s) {
boolean flag = true;
// 把字符串转成字符数组
for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
if (chs[start] != chs[end]) {
flag = false;
break;
return flag;
(5)面试题
小细节:
stringbuffer :同步的,数据安全,效率低。
stringbuilder :不同步的,数据不安全,效率高。
a:string,stringbuffer,stringbuilder的区别
b:stringbuffer和数组的区别?
* 面试题:
* a:string,stringbuffer,stringbuilder的区别?
* a:string是内容不可变的,而stringbuffer,stringbuilder都是内容可变的。
* b:stringbuffer是同步的,数据安全,效率低;stringbuilder是不同步的,数据不安全,效率高
*b:stringbuffer和数组的区别?
* 二者都可以看出是一个容器,装其他的数据。
* 但是呢,stringbuffer的数据最终是一个字符串数据。
* 而数组可以放置多种数据,但必须是同一种数据类型的。
*/
(6)注意的问题:
string作为形式参数,stringbuffer作为形式参数。
/*形式参数问题
* string作为参数传递
* stringbuffer作为参数传递
* 形式参数:
* 基本类型:形式参数的改变不影响实际参数
* 引用类型:形式参数的改变直接影响实际参数
* 注意:
* string作为参数传递,效果和基本类型作为参数传递是一样的。
string s1 = "hello";
string s2 = "world";
system.out.println(s1 + "---" + s2);// hello---world
change(s1, s2);
stringbuffer sb1 = new stringbuffer("hello");
stringbuffer sb2 = new stringbuffer("world");
system.out.println(sb1 + "---" + sb2);// hello---world
change(sb1, sb2);
system.out.println(sb1 + "---" + sb2);// hello---worldworld
public static void change(stringbuffer sb1, stringbuffer sb2) {
sb1 = sb2;
sb2.append(sb1);
public static void change(string s1, string s2) {
s1 = s2;
s2 = s1 + s2;
2:数组高级以及arrays(掌握)
(1)排序
a:冒泡排序
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。
public static void bubblesort(int[] arr) {
for(int x=0; x<arr.length-1; x++) {
for(int y=0; y<arr.length-1-x; y++) {
if(arr[y] > arr[y+1]) {
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
* 数组排序之冒泡排序:
* 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
public class arraydemo {
int[] arr = { 24, 69, 80, 57, 13 };
system.out.println("排序前:");
printarray(arr);
// 第一次比较
// arr.length - 1是为了防止数据越界
// arr.length - 1 - 0是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 0; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
system.out.println("第一次比较后:");
// 第二次比较
// arr.length - 1 - 1是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 1; x++) {
system.out.println("第二次比较后:");
// 第三次比较
// arr.length - 1 - 2是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 2; x++) {
system.out.println("第三次比较后:");
// 第四次比较
// arr.length - 1 - 3是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 3; x++) {
system.out.println("第四次比较后:");
*/
// 既然听懂了,那么上面的代码就是排序代码
// 而上面的代码重复度太高了,所以用循环改进
// for (int y = 0; y < 4; y++) {
// for (int x = 0; x < arr.length - 1 - y; x++) {
// if (arr[x] > arr[x + 1]) {
// int temp = arr[x];
// arr[x] = arr[x + 1];
// arr[x + 1] = temp;
// 由于我们知道比较的次数是数组长度-1次,所以改进最终版程序
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) {
if (arr[y] > arr[y + 1]) {
arr[y] = arr[y + 1];
arr[y + 1] = temp;
system.out.println("排序后:");
//由于我可能有多个数组要排序,所以我要写成方法
bubblesort(arr);
//冒泡排序代码
public static void bubblesort(int[] arr){
// 遍历功能
public static void printarray(int[] arr) {
system.out.print("[");
system.out.print(arr[x]);
system.out.print(arr[x] + ", ");
system.out.println("]");
b:选择排序
把0索引的元素,和索引1以后的元素都进行比较,第一次完毕,最小值出现在了0索引。同理,其他的元素就可以排好。
public static void selectsort(int[] arr) {
for(int y=x+1; y<arr.length; y++) {
if(arr[y] < arr[x]) {
arr[x] = arr[y];
arr[y] = temp;
* 数组排序之选择排序:
* 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
// 第一次
int x = 0;
for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
// 第二次
x = 1;
// 第三次
x = 2;
// 第四次
x = 3;
//通过观察发现代码的重复度太高,所以用循环改进
for(int x=0; x<arr.length-1; x++){
for(int y=x+1; y<arr.length; y++){
if(arr[y] <arr[x]){
arr[y] = temp;
//用方法改进
selectsort(arr);
public static void selectsort(int[] arr){
(2)查找
a:基本查找
针对数组无序的情况
public static int getindex(int[] arr,int value) {
int index = -1;
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
return index;
b:二分查找(折半查找)
针对数组有序的情况(千万不要先排序,在查找)
public static int binarysearch(int[] arr,int value) {
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
while(arr[mid] != value) {
if(arr[mid] > value) {
max = mid - 1;
}else if(arr[mid] < value) {
min = mid + 1;
if(min > max) {
return -1;
mid = (min+max)/2;
return mid;
* 查找:
* 基本查找:数组元素无序(从头找到尾)
* 二分查找(折半查找):数组元素有序
* a:定义最大索引,最小索引
* b:计算出中间索引
* c:拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大左边找
* 小右边找
* d:重新计算出中间索引
* max = mid - 1;
* min = mid + 1;
* e:回到b
//定义一个数组
int[] arr = {11,22,33,44,55,66,77};
//写功能实现
int index = getindex(arr, 33);
system.out.println("index:"+index);
//假如这个元素不存在后有什么现象呢?
index = getindex(arr, 333);
* 两个明确:
* 返回值类型:int
* 参数列表:int[] arr,int value
public static int getindex(int[] arr,int value){
//定义最大索引,最小索引
int max = arr.length -1;
//计算出中间索引
int mid = (max +min)/2;
//拿中间索引的值和要查找的值进行比较
while(arr[mid] != value){
if(arr[mid]>value){
}else if(arr[mid]<value){
//加入判断
if(min > max){
mid = (max +min)/2;
package cn.itcast_04;
* 注意:下面这种做法是有问题的。
* 因为数组本身是无序的,所以这种情况下的查找不能使用二分查找。
* 所以你先排序了,但是你排序的时候已经改变了我最原始的元素索引。
public class arraydemo2 {
// 定义数组
// 先排序
// 后查找
int index = getindex(arr, 80);
system.out.println("index:" + index);
// 冒泡排序代码
// 二分查找
public static int getindex(int[] arr, int value) {
// 定义最大索引,最小索引
int max = arr.length - 1;
// 计算出中间索引
int mid = (max + min) / 2;
// 拿中间索引的值和要查找的值进行比较
while (arr[mid] != value) {
if (arr[mid] > value) {
} else if (arr[mid] < value) {
// 加入判断
if (min > max) {
mid = (max + min) / 2;
(3)arrays工具类
a:是针对数组进行操作的工具类。包括排序和查找等功能。
b:要掌握的方法(自己补齐方法)
把数组转成字符串:public static string tostring(int[]a)
排序: public static void sort(int[]a)
二分查找: public static int binarysearch(int[]a,int key)
import java.util.arrays;
* arrays:针对数组进行操作的工具类。比如说排序和查找。
* 1:public static string tostring(int[] a) 把数组转成字符串
* 2:public static void sort(int[] a) 对数组进行排序
* 3:public static int binarysearch(int[] a,int key) 二分查找
public class arraysdemo {
// public static string tostring(int[] a) 把数组转成字符串
system.out.println("排序前:" + arrays.tostring(arr));
// public static void sort(int[] a) 对数组进行排序
arrays.sort(arr);
system.out.println("排序后:" + arrays.tostring(arr));
// [13, 24, 57, 69, 80]
// public static int binarysearch(int[] a,int key) 二分查找
system.out.println("binarysearch:" + arrays.binarysearch(arr, 57));
system.out.println("binarysearch:" + arrays.binarysearch(arr, 577));
(4)arrays工具类的源码解析
public static string tostring(int[] a)
public static void sort(int[] a) 底层是快速排序,知道就可以了。有空看,有问题再问我
public static int binarysearch(int[] a,int key)
开发原则:
只要是对象,我们就要判断该对象是否为null。
public static string tostring(int[] a) {
//a -- arr -- { 24, 69, 80, 57, 13 }
if (a == null)
return "null"; //说明数组对象不存在
int imax = a.length - 1; //imax=4;
if (imax == -1)
return "[]"; //说明数组存在,但是没有元素。
stringbuilder b = new stringbuilder();
b.append('['); //"["
for (int i = 0; ; i++) {
b.append(a[i]); //"[24, 69, 80, 57, 13"
if (i == imax)
//"[24, 69, 80, 57, 13]"
return b.append(']').tostring();
b.append(", "); //"[24, 69, 80, 57, "
}
-----------------------------------------------------
int[] arr = {13, 24, 57, 69, 80};
public static int binarysearch(int[] a, int key) {
//a -- arr -- {13, 24, 57, 69, 80}
//key -- 577
return binarysearch0(a, 0, a.length, key);
private static int binarysearch0(int[] a, int fromindex, int toindex,
int key) {
//a -- arr -- {13, 24, 57, 69, 80}
//fromindex -- 0
//toindex -- 5
//key -- 577
int low = fromindex; //low=0
int high = toindex - 1; //high=4
while (low <= high) {
int mid = (low + high) >>> 1; //mid=2,mid=3,mid=4
int midval = a[mid]; //midval=57,midval=69,midval=80
if (midval < key)
low = mid + 1; //low=3,low=4,low=5
else if (midval > key)
high = mid - 1;
else
return mid; // key found
return -(low + 1); // key not found.
(5)把字符串中的字符进行排序
举例:
"edacbgf"
得到结果
"abcdefg"
package cn.itcast_03;
* 把字符串中的字符进行排序。
* 举例:"dacgebf"
* 结果:"abcdefg"
* a:定义一个字符串
* b:把字符串转换为字符数组
* c:把字符数组进行排序
* d:把排序后的字符数组转成字符串
* e:输出最后的字符串
public class arraytest {
// 定义一个字符串
string s = "dacgebf";
// 把字符串转换为字符数组
// 把字符数组进行排序
bubblesort(chs);
//把排序后的字符数组转成字符串
string result = string.valueof(chs);
//输出最后的字符串
system.out.println("result:"+result);
// 冒泡排序
public static void bubblesort(char[] chs) {
for (int x = 0; x < chs.length - 1; x++) {
for (int y = 0; y < chs.length - 1 - x; y++) {
if (chs[y] > chs[y + 1]) {
char temp = chs[y];
chs[y] = chs[y + 1];
chs[y + 1] = temp;
3:integer(掌握)
(1)为了让基本类型的数据进行更多的操作,java就为每种基本类型提供了对应的包装类类型
byte byte
shortshort
intinteger
longlong
floatfloat
doubledouble
charcharacter
booleanboolean
* 需求1:我要求大家把100这个数据的二进制,八进制,十六进制计算出来
* 需求2:我要求大家判断一个数据是否是int范围内的。
* 首先你的知道int的范围是多大?
* 为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了对应的类类型。包装类类型。
* byte byte
* shortshort
* intinteger
* longlong
* floatfloat
* doubledouble
* charcharacter
* booleanboolean
* 用于基本数据类型与字符串之间的转换。
public class integerdemo {
// 不麻烦的就来了
// public static string tobinarystring(int i)
system.out.println(integer.tobinarystring(100));
// public static string tooctalstring(int i)
system.out.println(integer.tooctalstring(100));
// public static string tohexstring(int i)
system.out.println(integer.tohexstring(100));
// public static final int max_value
system.out.println(integer.max_value);
// public static final int min_value
system.out.println(integer.min_value);
(2)integer的构造方法
a:integer i = new integer(100);
b:integer i = new integer("100");
注意:这里的字符串必须是由数字字符组成
package cn.itcast_02;
* integer的构造方法:
* public integer(int value)
* public integer(string s)
* 注意:这个字符串必须是由数字字符组成
// 方式1
int i = 100;
integer ii = new integer(i);
system.out.println("ii:" + ii);
// 方式2
string s = "100";
// numberformatexception
// string s = "abc";
integer iii = new integer(s);
system.out.println("iii:" + iii);
(3)string和int的相互转换
a:string -- int
integer.parseint("100");
b:int -- string
string.valueof(100);
* int类型和string类型的相互转换
* int -- string
* string.valueof(number)
* string -- int
* integer.parseint(s)
// int -- string
int number = 100;
string s1 = "" + number;
string s2 = string.valueof(number);
// 方式3
// int -- integer -- string
integer i = new integer(number);
string s3 = i.tostring();
system.out.println("s3:" + s3);
// 方式4
// public static string tostring(int i)
string s4 = integer.tostring(number);
system.out.println("s4:" + s4);
system.out.println("-----------------");
// string -- int
// string -- integer -- int
integer ii = new integer(s);
// public int intvalue()
int x = ii.intvalue();
system.out.println("x:" + x);
//方式2
//public static int parseint(string s)
int y = integer.parseint(s);
system.out.println("y:"+y);
(4)其他的功能(了解)
进制转换
* 常用的基本进制转换
* public static string tobinarystring(int i)
* public static string tooctalstring(int i)
* public static string tohexstring(int i)
* 十进制到其他进制
* public static string tostring(int i,int radix)
* 由这个我们也看到了进制的范围:2-36
* 为什么呢?0,...9,a...z
* 其他进制到十进制
* public static int parseint(string s,int radix)
// 十进制到二进制,八进制,十六进制
system.out.println("-------------------------");
// 十进制到其他进制
system.out.println(integer.tostring(100, 10));
system.out.println(integer.tostring(100, 2));
system.out.println(integer.tostring(100, 8));
system.out.println(integer.tostring(100, 16));
system.out.println(integer.tostring(100, 5));
system.out.println(integer.tostring(100, 7));
system.out.println(integer.tostring(100, -7));
system.out.println(integer.tostring(100, 70));
system.out.println(integer.tostring(100, 1));
system.out.println(integer.tostring(100, 17));
system.out.println(integer.tostring(100, 32));
system.out.println(integer.tostring(100, 37));
system.out.println(integer.tostring(100, 36));
//其他进制到十进制
system.out.println(integer.parseint("100", 10));
system.out.println(integer.parseint("100", 2));
system.out.println(integer.parseint("100", 8));
system.out.println(integer.parseint("100", 16));
system.out.println(integer.parseint("100", 23));
//numberformatexception
//system.out.println(integer.parseint("123", 2));
(5)jdk5的新特性
自动装箱基本类型--引用类型
自动拆箱引用类型--基本类型
把下面的这个代码理解即可:
integer i = 100;
i += 200;
* jdk5的新特性
* 自动装箱:把基本类型转换为包装类类型 integer类中valueof
* 自动拆箱:把包装类类型转换为基本类型 integer类中intvalue
* 注意一个小问题:
* 在使用时,integer x = null;代码就会出现nullpointerexception。
* 建议先判断是否为null,然后再使用。
// 定义了一个int类型的包装类类型变量i
// integer i = new integer(100);
integer ii = 100;
ii += 200;
// 通过反编译后的代码
// integer ii = integer.valueof(100); //自动装箱
// ii = integer.valueof(ii.intvalue() + 200); //自动拆箱,再自动装箱
// system.out.println((new stringbuilder("ii:")).append(ii).tostring());
integer iii = null;
// nullpointerexception
if (iii != null) {
iii += 1000;
system.out.println(iii);
(6)面试题
-128到127之间的数据缓冲池问题
字符方法区中存在一个字节常量池
* 看程序写结果
* 注意:integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据
integer i1 = new integer(127);
integer i2 = new integer(127);
system.out.println(i1 == i2);
system.out.println(i1.equals(i2));
system.out.println("-----------");
integer i3 = new integer(128);
integer i4 = new integer(128);
system.out.println(i3 == i4);
system.out.println(i3.equals(i4));
integer i5 = 128;
integer i6 = 128;
system.out.println(i5 == i6);
system.out.println(i5.equals(i6));
integer i7 = 127;
integer i8 = 127;
system.out.println(i7 == i8);
system.out.println(i7.equals(i8));
// 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间
// integer ii = integer.valueof(127);
4:character(了解)
(1)character构造方法
character ch = new character('a');
* character 类在对象中包装一个基本类型 char 的值
* 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然
* 构造方法:
* character(char value)
public class characterdemo {
// character ch = new character((char) 97);
system.out.println("ch:" + ch);
(2)要掌握的方法:(自己补齐)
a:判断给定的字符是否是大写
b:判断给定的字符是否是小写
c:判断给定的字符是否是数字字符
d:把给定的字符转成大写
e:把给定的字符转成小写
* public static boolean isuppercase(char ch):判断给定的字符是否是大写字符
* public static boolean islowercase(char ch):判断给定的字符是否是小写字符
* public static boolean isdigit(char ch):判断给定的字符是否是数字字符
* public static char touppercase(char ch):把给定的字符转换为大写字符
* public static char tolowercase(char ch):把给定的字符转换为小写字符
// public static boolean isuppercase(char ch):判断给定的字符是否是大写字符
system.out.println("isuppercase:" + character.isuppercase('a'));
system.out.println("isuppercase:" + character.isuppercase('0'));
system.out.println("-----------------------------------------");
// public static boolean islowercase(char ch):判断给定的字符是否是小写字符
system.out.println("islowercase:" + character.islowercase('a'));
system.out.println("islowercase:" + character.islowercase('0'));
// public static boolean isdigit(char ch):判断给定的字符是否是数字字符
system.out.println("isdigit:" + character.isdigit('a'));
system.out.println("isdigit:" + character.isdigit('0'));
// public static char touppercase(char ch):把给定的字符转换为大写字符
system.out.println("touppercase:" + character.touppercase('a'));
// public static char tolowercase(char ch):把给定的字符转换为小写字符
system.out.println("tolowercase:" + character.tolowercase('a'));
(3)案例:
统计字符串中大写,小写及数字字符出现的次数
* 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
* a:定义三个统计变量。
* int bigcont=0;
* int smalcount=0;
* int numbercount=0;
* b:键盘录入一个字符串。
* c:把字符串转换为字符数组。
* d:遍历字符数组获取到每一个字符
* e:判断该字符是
* 大写bigcount++;
* 小写smalcount++;
* 数字numbercount++;
* f:输出结果即可
public class charactertest {
// 定义三个统计变量。
int bigcount = 0;
int smallcount = 0;
int numbercount = 0;
// 键盘录入一个字符串。
string line = sc.nextline();
// 把字符串转换为字符数组。
char[] chs = line.tochararray();
// 历字符数组获取到每一个字符
for (int x = 0; x < chs.length; x++) {
char ch = chs[x];
// 判断该字符
if (character.isuppercase(ch)) {
bigcount++;
} else if (character.islowercase(ch)) {
smallcount++;
} else if (character.isdigit(ch)) {
numbercount++;
// 输出结果即可
system.out.println("大写字母:" + bigcount + "个");
system.out.println("小写字母:" + smallcount + "个");
system.out.println("数字字符:" + numbercount + "个");
java帮帮交流群