byte数组转为string_String类基础的那些事!

论坛 期权论坛     
选择匿名的用户   2021-5-30 23:27   155   0
<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 &#61; &#34;hello&#34;;</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 &#61; new String();
          System.out.println(&#34;s1:&#34; &#43; s1);
          System.out.println(&#34;s1.length:&#34; &#43; s1.length());
          System.out.println(&#34;-------------------------&#34;);
  
          //把字节数组转换成字符串:public String(byte[] bytes)
          byte[] bys &#61; {<!-- -->97,98,99,100,101}; //abcde
          String s2 &#61; new String(bys);
          System.out.println(&#34;s2:&#34; &#43; s2);
          System.out.println(&#34;s2.length:&#34; &#43; s2.length());
          System.out.println(&#34;-------------------------&#34;);
  
          //把字节数组的一部分转换成字符串:
          //public String(byte[] bytes,int offset,int length)
          String s3 &#61; new String(bys,1,3);
          System.out.println(&#34;s3:&#34; &#43; s3);
          System.out.println(&#34;s3.length:&#34; &#43; 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 &#61; &#34;Hello&#34;;
          s &#43;&#61; &#34;World&#34;;
          System.out.println(&#34;s:&#34; &#43; s);
      }
  }
  
  //运行结果:
  s:HelloWorld</code></pre>
</div>
<p><b>解释:</b>不能改变是指字符串对象本身不能改变,而不是指对象的引用不能改变,上述过程中,字符串本身的内容是没有任何变化的,而是分别创建了三块内存空间,(Hello) (World) (HelloWorld) s → Hello &#43; World → HelloWorld 。String内容的改变实际上是通过字符串之间的拼接、断开进行的,如上例中拼接后s的引用也就指向了 拼接后的HelloWorld </p>
<p><b>总结</b>:开发中,尽量少使用 &#43; 进行字符串的拼接,尤其是循环内,我们更加推荐使用StringBuild、StringBuffer,此内容下一篇详细讲解。</p>
<p><b>例题二:</b></p>
<div class="blockcode">
  <pre class="blockcode"><code>  //两者的区别
  String s &#61; new String(&#34;hello&#34;);
  String s &#61; &#34;hello&#34;;</code></pre>
</div>
<p>前者创建了2个 (1个) 对象,后者创建了1个 (0个) 对象</p>
<p>下面解释中若<b>存在情况</b>满足则,分别为创建1个和0个对象</p>
<p>解释:</p>
<p><b>String s &#61; new String(&#34;hello&#34;); 创建实例过程</b></p>
<ol><li>在堆中创建一个对象 “hello” (new出来的),让 s 引用这个对象</li><li>在字符串常量池中查找是否存在内容为 “hello”的字符串对象<br> A:<b>若存在</b>,将new出的对象与字符串常量池中已存在的相联系<br> B:<b>若不存在</b>,则在字符串常量池中创建一个内容为 &#34;abc&#34; 的字
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP