程序:


public class Test {
public static void main(String args[]) {
String s1 = "abc";
String s2 = "abc";
String s3 = "abc" + "def";
String s4 = "abcdef";
String s5 = s2 + "def";
String s6 = new String("abc");
System.out.println(s1 == s2);
System.out.println(s3 == s4);
System.out.println(s4 == s5);
System.out.println(s4.equals(s5));
System.out.println(s6.equals(s1));
System.out.println();
System.out.print(
"\ns1:"+System.identityHashCode(s1)+
"\ns2:"+System.identityHashCode(s2)+
"\ns3:"+System.identityHashCode(s3)+
"\ns4:"+System.identityHashCode(s4)+
"\ns5:"+System.identityHashCode(s5)+
"\ns6:"+System.identityHashCode(s6)); }
}

内存模型图:

结果:

true
true
false
true
true s1:557041912
s2:557041912
s3:1134712904
s4:1134712904
s5:985922955
s6:1435804085
由结果可知

         s1和s2指向的地址都是常量池中的"abc"
s3和s4指向的地址都是常量池中的"abcdef"
s5和s3并不指向同一个地址,其实s5指向的是对象内存区,也就是s5其实指向了一个对象
s6同理. 分析:
字符串用"+"拼接的时候,如果是两个常量拼接,,不是通过某种方式将两个字符串的地址进行处理,连接两 个字符串,而是直接产生一个由两个字符串拼接的新字符串常量;
字符串用"+"拼接的时候,如果有变量参与拼接,则产生一个新对象

注意:

Java有时候自动将原始数据类型转换成包装类

eg:String s = 1 + "sss";

这里的1本来是int型常量,在进行拼接时,Java进行了类型升级,升级成为了Integer类,并调用了Integer类的toString()方法,将1从数字转换成了字符串,然后再进行拼接

java string字符拼接符"+"的研究的更多相关文章

  1. 【Java】字符拼接成字符串的注意点

    这两天敲代码的时候,偶然间发现一个好玩的事情,分享一下,记录一下. 该段代码主要是:先产生的几个整数,把整数转换成对应的字符,最后的字符拼接成字符串,在把字符拼接成字符串的时候,个人因为偷懒使用+号进 ...

  2. Java中final修饰符深入研究

    一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...

  3. C# String 字符拼接测试(“+”、string.Format、StringBuilder 比较)

    对于字符串的拼接自己一直有疑问,在何时该用什么方法来拼接?哪种方法更好.更适合. 几种方法 1.“+” 拼接字符串 现在在 C# 中,字符串进行拼接,可以直接用 “+” 而且可以直接用于数字类型的而不 ...

  4. java String 中用"+"拼接字符串的原理

    之前看<thinkinjava>时记得书上分析国这个问题,然后面试的时候问道了,结果面试官说时的很含糊说是new了一个对象,我说底层用的Stringbuild.他还是说我说错了.谨以此文的 ...

  5. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  6. java String拼接的方法选择及性能分析

    String 拼接的方法选择 在拼接静态字符串时,尽量用 +,因为通常编译器会对此做优化,如: String test = "this " + "is " + ...

  7. java String长度与varchar长度匹配理解(字符和字节长度理解)

    java String长度与varchar长度匹配理解(字符和字节长度理解) string中的length()长度,返回的是char的数量,每个char可以存储世界上任何类型的文字和字符,一个char ...

  8. Java总结篇系列:Java String

    String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...

  9. 【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片

    一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...

随机推荐

  1. 力扣(LeetCode)15. 三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  2. 利用vue-cli3快速搭建vue项目详细过程

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  3. Python全栈开发-有趣的小程序

    进度条的打印 import sys,time for i in range(20): sys.stdout.write('$')      #stdout是标准输出的意思,在一般电脑上,stdout的 ...

  4. 动态规划-击爆气球 Burst Balloons

    2018-10-03 19:29:43 问题描述: 问题求解: 很有意思的题目,首先想到的是暴力遍历解空间,当然也用到了memo,可惜还是TLE,因为时间复杂度确实有点过高了,应该是O(n!). Ma ...

  5. 分享基于EF+WCF的通用三层架构及解析

    本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务调用及一个分页的实例. 1. 项目架构图: ...

  6. 20170920xlVBA_FTP_UpDownLoad_DownLoad

    '建立应用环境进程 Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpen ...

  7. hihocoder-1419 后缀数组四·重复旋律4 求连续重复次数最多的子串

    对于重复次数,如果确定了重复子串的长度len,那重复次数k=lcp(start,start+len)/len+1.而暴力枚举start和len的复杂度是O(n^2),不能接受.而有一个规律,若我们只枚 ...

  8. android-------- 多渠道打包(借助友盟移动统计分析)

    好久没有发博客了,原因是换工作了,今天端午假期,所以来发一篇博客, 多渠道打包,借助友盟移动统计分析,希望对各位有所帮助 多渠道打包的理解: 渠道包就是要在安装包中添加渠道信息,也就是channel, ...

  9. day1-6 字符串、列表、元组、字典、类型转换

    day1 1.python历史. 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 2.python的环 ...

  10. 【洛谷p1507】NASA的食物计划

    (一次a……) NASA的食物计划[传送门] 好的上算法标签: 嗯这是个二维背包 (万年不变分隔线) 二维的题就是在一维基础上增加了一个条件,这个背包不仅含有质量还有体积.所以我们增加一层循环.核心算 ...