文章目录
1 String类简介
字符串严格意义上来讲并不能算作一个基本数据类型,是Java利用JVM技术制造的一种可以简单使用的数据类型。
需要注意的是,String这个类里面之所以可以保存字符串主要的原因是其中定义了一个数组,所以String类字符串中的每一个字符的数据都是保存在了数组之中。
String本身包装的是一个数组,并且其有两种对象的实例化形式:直接赋值,构造方法实例化。
2 字符串比较
使用==可能不准确,应该使用public boolean equals(String str),此方法有变形。
3 字符串常量是String类的匿名对象
所谓的String类对象的直接赋值直接描述的是,将一个匿名对象设置一个具体的引用名字。
关于对象相等判断的小技巧:在以后进行项目开发的时候,如果某些数据是由用户输入,并且要求这些数据为一个指定内容的情况下建议将字符串常量写在前面。
4 String类对象两种实例化方式区别
- 直接赋值
(1)在程序中只需要将字符串赋值给String类的对象就可以实现对象的实例化处理。利用直接赋值实例化String的形式可以实先同一个字符传对象数据的共享操作。
(2)为什么可以共享呢?之所以会有这样的特点,主要的原因是因为在Java程序的底层提供有一个专门的字符串池(字符串数组)。在采用直接赋值的处理过程之中,对于字符串而言可以实现池数据的自动保存,这样如果再有相同数据定义时,以减少数据对象的产生,以提升操作性能。入池重用。 - 构造方法实例化
(1)普通形式:new会开辟两块堆内存空间,而后只会使用一块,字符串常量会成为垃圾被GC回收。
(2)其他方式:即先直接赋值,在字符串常量池中产生String对象,然后使用普通形式,这样就避免产生垃圾。除了以上特点之外,在使用构造方法实例化String对象时不会自动出现保存到字符串池的处理。 - 总结
(1)直接赋值的特点可以自动将对象保存到对象池之中
(2)可以发现构造方法实例化的对象实际上是属于一种自己专用的内存空间,但是在String类里面以提供有帮助开发者手动入池的处理情况,这个方法:public String intern(); - 面试题:请解释String类两种对象实例化方式的区别?
(1)直接赋值:只会产生一个实例化对象,并且可以自动保存到对象池之中,以实现该字符串实例的重用。
(2)构造方法:会产生两个实例化对象,并且不会自动入池,无法实现对象重用,但是可以使用intern()方法手工入池。
5 String对象(常量)池
- 对象池的主要目的是实现数据的共享处理。在Java之中对象(常量)池实际上可以分为两种:
(1)静态常量池:指的是程序(*.class)在加载的时候会自动将此程序之中保存的字符串、普通的常量、类和方法的信息等等,全部进行分配;
(2)运行时常量池:当一个程序(*.class)加载之后,里面可能有一些变量,这个时候提供的一个常量池。
6 字符串修改分析
在String类之中包含的是一个数组,数组最大的特点就是长度不可改变。
在整个处理过程之中,字符串常量的内容并没有发生任何的改变改变的只是一个String类对象的引用,并且这种改变将有可能带来大量的垃圾空间。
7 主方法组成分析
Java中的主方法:pubic static void main(String [] args){}
- public
描述的是一种访问权限,主方法是一切的开始点,开始点一定是公共的; - static
程序的执行是通过类名称完成的,所以表示此方法是由类直接调用的。 - void
主方法是一切的起点,起点一旦开始就没有返回的可能; - main
是一个系统定义好的方法名称 - String args[]:字符串数组,可以实现程序启动参数的接受。但千万记住,如果你的参数本身拥有空格,则必须使用双引号包装。
以后可以暂时通过这种启动参数实现数据的输入模拟。