写点什么

Java 个人学习之旅 (第十天),黑马程序员 Java 全套视频

发布于: 4 小时前
  1. 当调用 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));


# 最后
我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?
既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?
架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。
如果你也想成为一名好的架构师,那或许这份**[Java核心架构笔记](https://gitee.com/vip204888/java-p7)**你需要阅读阅读,希望能够对你的职业发展有所帮助。
**中高级开发必知必会:**
![](https://static001.geekbang.org/infoq/e3/e37f7b0b2bbd7f809d60d6334a5dd01c.png)
复制代码


用户头像

VX:Lzzzzzz63 领取资料 2021.07.07 加入

还未添加个人简介

评论

发布
暂无评论
Java个人学习之旅(第十天),黑马程序员Java全套视频