java中String类学习笔记

时间:2021-07-14 23:11:03
1.String的两种实例化方式
String str="hello";//直接赋值的方式:
String str=new String("hello");//实例化的方式:

 两种实例化方式的比较

public class Test{
public static void main(String args[]){
String str1="hello";
String str2=new String("hello");
String str3=str2;//引用传递,str3直接指向st2的堆内存地址
String str4="hello";
//String类对象==比较,比较的是地址,而不是内容
System.out.println(str1==str2);//false
System.out.println(str1==str3);//false
System.out.println(str3==str2);//true
System.out.println(str1==str4);//true
}
}

内存分析图:

java中String类学习笔记

构造方法实例化方式的内存图:String str = new String("hello");

java中String类学习笔记

  字符串对象池的概念:

    在字符串中,如果采用直接赋值的方式(String str="hello")进行对象的实例化,则会将匿名对象“hello”放入对象池,每当下一次对不同的对象进行直接赋值的时候会直接利             用池中原有的匿名对象,这样,所有直接赋值的String对象,如果利用相同的“hello”,则String对象==返回true;

案例:对象手工入池

public class TestDemo {
public static void main(String args[]){
String str =new String("hello").intern();//对匿名对象"hello"进行手工入池操作
String str1="hello";
System.out.println(str==str1);//true
}
}

两种实例化方式的区别

  1.直接赋值(String str = "hello"):只开辟一块堆内存空间,并且会自动入池,不会产生垃圾;

  2.构造方法(String str=  new String("hello");):会开辟两块堆内存空间,其中一块堆内存会变成垃圾被系统回收,而且不能够自动入池,需要通过public  String intern();方法进行手工入池;

  在开发的过程中不会采用构造方法进行字符串的实例化;

避免空指向

   == 和·public boolean equals()比较字符串的区别;

    ==在对字符串比较的时候,对比的是内存地址,而equals比较的是字符串内容,在开发的过程中,equals()通过接受参数,可以避免空指向;

String str = null;
if(str.equals("hello")){//此时会出现空指向异常
  ...
}
if("hello".equals(str)){//此时equals会处理null值,可以避免空指向异常
  ...
}

4.String类对象一旦声明则不可以改变;而改变的只是地址,原来的字符串还是存在的,并且产生垃圾

public class TestDemo {
public static void main(String args[]){
String str="hello world";
str="hello";
System.out.println(str);
}
}

java中String类学习笔记

java中String类学习笔记的更多相关文章

  1. java中String类学习

    java中String类的相关操作如下: (1)初始化:例如,String s = “abc”; (2)length:返回字符串的长度. (3)charAT:字符操作,按照索引值获得字符串中的指定字符 ...

  2. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

  3. 在java中String类为什么要设计成final

    在java中String类为什么要设计成final? - 胖胖的回答 - 知乎 https://www.zhihu.com/question/31345592/answer/114126087

  4. 【转载】Java中String类的方法及说明

    转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.      String sc_ ...

  5. 在java中String类为什么要设计成final?

    大神链接:在java中String类为什么要设计成final? - 程序员 - 知乎 我进行了重新排版,并且更换了其中的一个例子,让我们更好理解. String很多实用的特性,比如说“不可变性”,是工 ...

  6. Java中String类为什么被设计为final?

    Java中String类为什么被设计为final   首先,String是引用类型,也就是每个字符串都是一个String实例.通过源码可以看到String底层维护了一个byte数组:private f ...

  7. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  8. java 中String类的常用方法总结,带你玩转String类。

    String类: String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.String类对象创建后不能修改,StringBuffer & St ...

  9. java中String类为什么不可变?

    在面试中经常遇到这样的问题:1.什么是不可变对象.不可变对象有什么好处.在什么情景下使用它,或者更具体一点,java的String类为什么要设置成不可变类型? 1.不可变对象,顾名思义就是创建后的对象 ...

随机推荐

  1. LA 3231 - Fair Share

    You are given N processors and M jobs to be processed. Two processors are specified to each job. To ...

  2. Atom使用记录(持续更新中)

    部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...

  3. jq attr()改变checkbox的checked无效!!!!

    今天做项目发现用attr()改变checked,实现全选功能的时候发现,第一次点击有效,之后点击全选功能便实效. 一开始以为是自己写错了,在各种碰壁之后,才猛然发现,原来这是jq的一个小bug. 在j ...

  4. 获取DIV与浏览器顶部相聚一定位置之后移动DIV

    获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 方法一: $(function() {  ...

  5. 虚拟化之esxi命令行管理之二

    /vmfs # ls -l lrwxrwxrwx 1 root root 4 Mar 23 2013 devices -> /dev drwxr-xr-x 1 root root 512 Sep ...

  6. Class的生命周期

    之前的<JVM类载入机制-ClassLoader>和<初探JVM-ClassLoader源代码>,仅仅是讨论了Class的载入部分,如今来纵观一下整个Class的生命周期. C ...

  7. C&num;&sol;IOS&sol;Android通用加密解密方法

    原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...

  8. Unity游戏程序员面试题及解答

    典型的一些如手写排序算法.一些基本数学问题,在此就不列举了.以下整理出一些代表性的.有参考价值的题,真实面试题,附有本人的解答,欢迎讨论. 题1.指出下列哪些属于值类型? int System.Obj ...

  9. 201521123042 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 参考资料: 百度脑图 XMind 2. 书面作业 作业参考文件下载 Q1.代码阅读:Child压缩包内源代码 1.1 com. ...

  10. 51Nod1203 2012集训队答辩 JZPLCM

    A1339. JZPLCM(顾昱洲) 时间限制:3.0s   内存限制:256.0MB   试题来源 2012中国国家集训队命题答辩 问题描述 给定一长度为n的正整数序列a,有q次询问,每次询问一段区 ...