Java个人学习之旅(第十天),Java开发面试技能介绍

10. toCharArray

  • 将字符串装转换为字符数组

  • 返回值类型:char[]

  • 参数类型:String

11. toUpperCase&&toLowerCase

  • 将字符串转换为全大写&&全小写

  • 返回值类型:String

12. intern

  • 返回字符串对象的规范表示,也就是如果字符串常量池中已经创建有了该字符串的地址,则直接返回该地址值的引用,不再开辟新的内存空间

其实String类型常用的方法还有很多,在今后的开发中也会不断用到,所以我认为备一份jdk的API文档随时查阅是很有必要的

2. String 具有不可变性:

=====================================================================================

说明:

  1. 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。

  2. 当对现的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

  3. 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

代码举例:


public class Example {

	public static void main(String[] args) {

		String a = "Hello";  //字面量的定义方法

		

		String b = "Hello";

		

		String c = new String("Hello");

		

		String d = new String("Hello");

		

		System.out.println(a == b); //true   比较地址值

		

		System.out.println(a == c); //false

		System.out.println(a.equals(c));  //true

		

		System.out.println(c == d);  //false

		System.out.println(c.equals(d));   //true

	}  

} 

上述代码的结果中的第一个比较结果完全是巧合,原因是字符串刚生成时调用的是同一块字符串常量池,而字符串常量池不会存在相同类型的常量,这也就意味着这两个字符串的地址值是相同的

如果我们再对a和b赋值然后再比较就能说明问题了


public class Example {

	public static void main(String[] args) {

		String a = "Hello";		

		a += "c";

		

		String b = "Hello";

		b += "c";

		

		System.out.println(a == b); 

	}  

} 

运行结果:

在这里插入图片描述

我们同时也可以发现,String实例化的方式有两种:

  1. 通过字面量的方式定义

  2. 通过new + 构造器的方式

第一种方式是在方法区的字符串常量池中直接开辟空间

第二种方式则是在堆生成对象,但引用的值还是来自字符串常量池

String是引用类型,涉及到引用类型的变量的比较,都用equals方法比较稳妥

3. StringBuilder和StringBuffer:

==================================================================================================

StringBuilder和StringBuffer都是用来拼接字符串的,后期会经常用到

首先看一下String,StringBuilder,StringBuffer三者之间的相关说明:

  1. String:不可变的字符序列;底层使用char[]存储

  2. StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储

  3. StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储

StringBuilder和StringBuffer的内存解析:

以StringBuffer为例:


public class Example {

	public static void main(String[] args) {

		

		StringBuffer sb1 = new StringBuffer();

		

		//查看StringBuffer的初始容量

		System.out.println(sb1.capacity()); 

		//查看StringBuffer的长度

		System.out.println(sb1.length());

	}  

} 

运行结果:

在这里插入图片描述

可以看到,StringBuilder的初始容量为16,没赋值时长度为零

当我们插入的字符串长度超过StringBuilder的初始容量时,StringBuilder会进行扩容,扩容的方式是:

原长度*2 + 2,同时将旧的数组赋值到新的数组中

StringBuilder和StringBuffer中的常用方法:


public class Example {

	public static void main(String[] args) {

		

		StringBuffer sb1 = new StringBuffer();



		//使用StringBuffer的append()方法拼接字符串

		sb1.append("Hello");

		

		System.out.println(sb1.toString()); //输出

		

		sb1.delete(0, 3); //删除字符方法,输入索引,左闭右开

		

		System.out.println(sb1.toString());

		

		sb1.setCharAt(0, 'h'); //修改字符,输入索引和修改后的字符

		

		System.out.println(sb1.toString());

		

		sb1.insert(0, 'l');  //插入字符,输入索引和要插入的字符

		

		System.out.println(sb1.toString());

	}  

} 

运行结果:

在这里插入图片描述

4. Date工具类:

===============================================================================

声明方式:


Date date = new Date(); 

这里实例化出来的对象打印出来是这样的

在这里插入图片描述

可以发现,虽然控制台打印的是正确的日期,但是可读性并不好,这时候可以用到SimpleDateFormat的方法


//先声明SimpleDateFormat对象,参数里规定日期格式,按顺序分别是年月日时分秒

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//调用format方法,返回值类型为String

System.out.println(sdf.format(date)); 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值