String是一个非常常用的类,应该深入的去了解String

如:

String str =new String(“abc”)

String str1 = “abc”

System.out.println(str == str1)

System.out.println(str.equal(str1))

结果:

false

true

原因解析:

Java运行环境有一个字符串池,由String类维护。
1. 执行语句String str=“abc”;时。首先查看字符串池中是否存在字符串"abc",如果存在则直接将“abc”赋给str,如果不存在则先在 字 符串池中新建一个字符串"abc",然后再将其赋给str.

2. 执行语句String str = new String(“abc”);时。不管字符串池中是否存在字符串“abc”,直接新建一个字符串“abc”,(注意,新建的字符串“abc”不是在字符串池中), 然后将其赋给str。由此可见 1.的效率要高于2的效率。

3. String str1=“java”;//指向字符串池
  String str2=“blog”;//指向字符串池
String s = str1+str2;

+运算符会在堆中建立起两个String对象,这两个对象的值分别是“java”,“blog”,也就是说从字符串常量池中复制这两个值,然后再堆中创建两个对象。然后再建立对象s,然后将“javablog”的堆地址赋给s. 这句话共创建了3个String对象

   System.out.println(s=="javablog");//结果是false;JVM确实对形如String str="javablog";的对象放在常量池中,但是它是在编译时name做的。而String s=str1+str2;是在运行时候才能知道的,也就是说str1+str2是在堆里创建的,所以结果为false了。String s="java"+"blog";//直接将javablog对象放入字符串池中。        System.out.println(s=="javablog");//结果是true;String s=str1+"blog";//不放在字符串池中,而是在堆中分分配。       System.out.println(s=="javablog");//结果是false;总之,创建字符串有两种方式:两种内存区域(pool,heap)1.""创建的字符串在字符串池中。2.new 创建字符串时,首先查看池中是否有相同的字符串,如果有则拷贝一份放到堆中,然后返回堆中的地址;如果池中没有则在堆中创建一分,然后返回堆中的地址,3.在对字符串赋值时,如果右操作数含有一个或一个以上的字符串引用时,则在堆中再建立一个字符串对象,返回引用如:String s= str1+"blog";

String str =new String(“abc“)和 String str = “abc“的比较相关推荐

  1. python str byte编码_Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题...

    Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str ...

  2. java正则表达式中的坑String.matches(regex)、Pattern.matches(regex, str)和Matcher.matches()

    问题:程序会计算表达式的值 //将数值转换以K为单位 String value = "10*1000*1000"; String regex="\\s*\\*\\s*10 ...

  3. python string和bytes互相转换,去除str(bytes)输出的b‘字眼

    b1 = b"i am dady" b2 = b"dady"print('*'*20,'Bytes => String','*'*20) print('将 ...

  4. java中String s=abc及String s=new String(abc)的区别

    <String的特性> 1.String类是final的,不可被继承. 2.String类是的本质是字符数组char[], 并且其值不可改变. 3.Java运行时会维护一个String P ...

  5. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  6. 怎么做到new String(abc) == new String(abc)双等号为true呢?不是使用equals哦

    正常情况 如果按照正常情况,你面试的时候,看到这个代码,你肯定会说:结果是false. 如果我要他们是true,应该怎么做呢?有什么方法吗? String str4 = new String(&quo ...

  7. String s=“abc“ 和 String s1=new String(“abc“)和String s2=new String(“abc“)之间的关系

    这篇文章针对困扰新手初学java基础时常遇到的难以理解的一个问题!!! ==∶它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较 ...

  8. c++ string replace_JAVA应用程序开发之String类常用API

    [本文详细介绍了JAVA应用开发中的String类常用API,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 API ( Application Interface 应用程序接口)是类中提供的接口, ...

  9. c++中几种常见的类型转换。int与string的转换,float与string的转换以及string和long类型之间的相互转换。to_string函数的实现和应用。...

    1.string转换为int a.采用标准库中atoi函数,对于float和龙类型也都有相应的标准库函数,比如浮点型atof(),long型atol(). 他的主要功能是将一个字符串转化为一个数字,在 ...

最新文章

  1. 【程序设计基础】第九、十、十一章 综合实例分析 递归
  2. 机器学习中的MLE、MAP和贝叶斯估计
  3. AIDE --Linux高级入侵检测
  4. 瑞幸咖啡恢复交易 股价大跌35.76%
  5. PCL 1.8.1 在VS2015中配置 包含目录、库目录和附加依赖项
  6. 南阳理工ACM 2括号配对问题
  7. Unity3D lable控件
  8. 计算机网络(第 8 版)第 1 章概述 谢希仁 编著
  9. 基于android的校园二手交易平台的设计
  10. LIFO栈 ADT接口 链表实现
  11. persistence.cpp:2197:ann.xml(1): There should be space between attributes in function icvXMLParseTag
  12. 华为手机计算机如何表达平方,华为手机郑平方:荣耀成功源于共享质量体系
  13. 简单的记账方法有哪些?
  14. js 将一大段时间均分为很多个小时间段
  15. 0.96寸OLED(二)SPI+DMA刷新OLED
  16. 一个有趣的游戏fizzbuzz
  17. a标签与button按钮
  18. 【RST笔记6】scheduler
  19. DXC Technology任命Ken Corless为产品与战略合作伙伴执行副总裁
  20. MikroTik RouterOS官网硬件一键开启DDNS动态域名解析,解决远程访问及映射/DDNS脚本

热门文章

  1. H5存储------localStorage和sessionStorage
  2. online_judge_1046
  3. 单臂路由与三层交换机—Vecloud微云
  4. OpenCV神经网络ANN代码编译运行与解读(二)
  5. flutter apk 打包
  6. 关于数位动规(入门到进阶,难度中档)
  7. 订阅号助手App发布 手机也能管理公众号了
  8. app启动页的设计技巧(一)
  9. UITableViewCell 添加长按手势
  10. JavaScript MVC框架和语言总结[infoq]