String str1="ABC"; 和String str2 = new String("ABC"); 有什么区别。

String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。

String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").

String 有一个intern() 方法,native,用来检测在String pool是否已经有这个String存在。

考虑下面的问题:

String str1 = new String("ABC");
String str2 = new String("ABC");

str1 == str2 的值是True 还是False呢? False.

String str3 = "ABC";
String str4 = "ABC";

String str5 = "A" + "BC";

str3 == str4 的值是True 还是False呢? True.

str3 == str5 的值是True 还是False呢? True.

 在写代码的时候,一般不要 String str2 = new String("ABC");

String a = "ABC";
String b="AB";
String c=b+"C";
System.out.println(a==c); false
a和b都是字符串常量所以在编译期就被确定了!

而c中有个b是引用不是字符串常量所以不会在编译期确定。
而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.

用new关键字对一个String 变量赋值和用literal值直接赋值有什么不同(转)相关推荐

  1. python定义一个整数变量_Python变量与常量

    1.什么是变量 a=1,其中 a 就是变量名称,1 就是它的值.在程序运行过程中,变量的值一般都会发生改变,内存中会专门开辟一段空间,用来存放变量的值,而变量名将指向这个值所在的内存空间.与变量相对的 ...

  2. 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...

    /*  * 问题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变  * 答:  * 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以 ...

  3. 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变

    使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 答: 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的. 代码 public ...

  4. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.

  5. Oracle 将一个查询结果值动态赋值给一个变量

    在写存储过程或函数时,经常需要用到中间变量,需要将一些值做临时存储. 可以通过动态变量方式来赋值.如下: FUNCTION YOUR_FUN (VAL1 IN NVARCHAR2)RETURN NCL ...

  6. java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等

    java的注释.关键字.标识符.变量常量.                             数据类型.运算符.流程控制等 1. java概述 1.1 java的技术体系 Java SE:是Ja ...

  7. Java中的标识符、关键字、字面值、变量、八种基本数据类型与类型转换规则

    目录 1.Java中的标识符 2.Java中的关键字 3.Java中的字面值 4.Java语言中的变量 5.Java中的数据类型 数据类型的分类 基本数据类型 1.char类型 2.整数类型 3.浮点 ...

  8. JAVA笔记(1)Java概述、开发环境搭建 、Eclipse概述、 注释、关键字、常量、变量、数据类型、标识符

    文章目录 第1章 Java概述 1.1 Java语言发展史 1.2 跨平台原理 1.3 JVM JRE JDK 第2章 Eclipse开发工具 2.1 Eclipse概述和安装 2.2 Eclipse ...

  9. python定义一个整数变量a_第二篇.1、python基础之数据类型与变量

    一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:"变"=>变 ...

最新文章

  1. SQL 2005 Express 的“企业管理器” 下载
  2. 蓝桥杯java第七届决赛第三题--打靶
  3. 一个视觉交互设计失败的案例
  4. SpringSecurity分布式整合之验证认证的过滤器
  5. [Jobdu] 题目1499:项目安排
  6. .NET Core 如何禁止.resx文件自动生成Designer.cs
  7. Linux基础(九)--定时任务
  8. 微信的cookie 和 session
  9. B VUE系列 三:vuex,vue全局变量管理和状态更新的利器
  10. 计算机教室建设方案ppt,屏蔽机房建设方案.ppt
  11. 化工、食品外贸行业管理难点
  12. 合宙air105上手记录
  13. 前端基础-04-盒子模型
  14. 简练软考知识点整理-估算活动资源
  15. 手游行业2011年十大事件盘点
  16. Spring Boot 入门之登录创建
  17. 主流七款WEB服务器软件点评
  18. PC微信视频号下载视频研究
  19. Coreldraw中选择工具技巧十五招
  20. 华为od机试真题 JS 实现【热点网站统计】

热门文章

  1. UITableView 详解 教程
  2. Promise async/await的理解和用法
  3. java 泛型详解、Java中的泛型方法、 java泛型详解
  4. [NOIP2015] 子串
  5. 嵌入式Linux系统运行流程图
  6. Linux+Nginx+Apache+Atlas+Mysql+Php+Redis 分部式部署详细版
  7. POJ-1386 Play on Words 有向图欧拉通路判定
  8. 【资料整理】一些英语面试题整理
  9. ffmpeg文档2:输出到屏幕
  10. html如何取消盒子间的间隔,使用flexbox时,多行子元素之间的间距如何控制?