<div>
<p></p>
<div style="text-align:center;">
<img alt="16802ad7b0310e7d491b62e79698aed0.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-612e987c48bc333e65307577cc726d2e.png">
</div>
<h2><b>第三阶段 JAVA常见对象的学习</b></h2>
<h2><b>第一章 常见对象——String类</b></h2>
<h3><b>(一) String 类的概述及其构造方法</b></h3>
<h3><b>(1) 概述</b></h3>
<p><b>多个字符</b>组成的一串数据,例如 “abc” 也可以看成是一个<b>字符数组。</b></p>
<p>而通过 API我们又可以知道</p>
<p>A:字符串字面值“abc”也可以看成是一个<b>字符串对象</b></p>
<p>B:字符串是常量,一旦被赋值,就不能改变</p>
<h3><b>(2) 构造方法</b></h3>
<div class="blockcode">
<pre class="blockcode"><code> //空构造
public String()
//把字节数组转换成字符串
public String(byte[] bytes)
//把字节数组的一部分转换成字符串
public String(byte[] bytes,int offset,int length)
//把字符数组转换成字符串
public String(char[] value)
//把字符数组的一部分转换成字符串
public String(char[] value,int offset,int count)
//把字符串常量值转换成字符串
public String(String original)
//下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
String s = "hello";</code></pre>
</div>
<p>简单总结:String类的构造方法可以将 <b>字节、字符数组、字符串常量</b>(全部或者部分)转换为字符串类型</p>
<h3><b>(3) 字符串方法</b></h3>
<div class="blockcode">
<pre class="blockcode"><code> //返回此字符串的长度
public int length ();</code></pre>
</div>
<h3><b>(4)构造方法和lenght方法的小案例</b></h3>
<div class="blockcode">
<pre class="blockcode"><code> //以前三个为例
public class StringDemo {<!-- -->
public static void main(String[] args) {<!-- -->
//public String():空构造
String s1 = new String();
System.out.println("s1:" + s1);
System.out.println("s1.length:" + s1.length());
System.out.println("-------------------------");
//把字节数组转换成字符串:public String(byte[] bytes)
byte[] bys = {<!-- -->97,98,99,100,101}; //abcde
String s2 = new String(bys);
System.out.println("s2:" + s2);
System.out.println("s2.length:" + s2.length());
System.out.println("-------------------------");
//把字节数组的一部分转换成字符串:
//public String(byte[] bytes,int offset,int length)
String s3 = new String(bys,1,3);
System.out.println("s3:" + s3);
System.out.println("s3.length:" + s3.length());
}
}
//运行结果:
s1:
s1.length:0
-------------------------
s2:abcde
s2.length:5
-------------------------
s3:bcd
s3.length:3</code></pre>
</div>
<p>注:97,98,99,100,101 在ASCII码中代表abcde,不熟悉的朋友请自行查阅</p>
<h3><b>(5) 经典例题(必看)</b></h3>
<p><b>例题一:</b></p>
<div class="blockcode">
<pre class="blockcode"><code> /*
* 字符串特点:一旦被赋值,就不能改变
*/
public class StringDemo {<!-- -->
public static void main(String[] args) {<!-- -->
String s = "Hello";
s += "World";
System.out.println("s:" + s);
}
}
//运行结果:
s:HelloWorld</code></pre>
</div>
<p><b>解释:</b>不能改变是指字符串对象本身不能改变,而不是指对象的引用不能改变,上述过程中,字符串本身的内容是没有任何变化的,而是分别创建了三块内存空间,(Hello) (World) (HelloWorld) s → Hello + World → HelloWorld 。String内容的改变实际上是通过字符串之间的拼接、断开进行的,如上例中拼接后s的引用也就指向了 拼接后的HelloWorld </p>
<p><b>总结</b>:开发中,尽量少使用 + 进行字符串的拼接,尤其是循环内,我们更加推荐使用StringBuild、StringBuffer,此内容下一篇详细讲解。</p>
<p><b>例题二:</b></p>
<div class="blockcode">
<pre class="blockcode"><code> //两者的区别
String s = new String("hello");
String s = "hello";</code></pre>
</div>
<p>前者创建了2个 (1个) 对象,后者创建了1个 (0个) 对象</p>
<p>下面解释中若<b>存在情况</b>满足则,分别为创建1个和0个对象</p>
<p>解释:</p>
<p><b>String s = new String("hello"); 创建实例过程</b></p>
<ol><li>在堆中创建一个对象 “hello” (new出来的),让 s 引用这个对象</li><li>在字符串常量池中查找是否存在内容为 “hello”的字符串对象<br> A:<b>若存在</b>,将new出的对象与字符串常量池中已存在的相联系<br> B:<b>若不存在</b>,则在字符串常量池中创建一个内容为 "abc" 的字 |
|