`
de6566088
  • 浏览: 31656 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

String深解

阅读更多
String str1 = "aa";
String str2 = new String("aa");
是相同么?
根据理解我的写的是:
str1是一个装包的过程 其相当于new String("aa");
当时就感觉这个问题看来是答错了,按照自己的理解
第一个难道要
str1 一个对象
new String("aa");一个对象
于是回来后网上查了一下:
以 String str="aa";形式赋值在java中叫直接量,它是在常量池中而不是象new 一样放在压缩堆中.
这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"aa"的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"aa",下一次如果有String s1 = "aa";又会将s1指向"aa"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象
String str1 ="aa"; ---------------------生成一个对象 "aa"
String str1 =new String ("aa"); ---------------生成两个对象,"aa"和new String ("aa")
也可以这么理解:
String str = "hello"; 先在内存中找是不是有"hello" 这个对象,
如果有,就让str指向那个"hello".如果内存里没有"hello",就创建一个新的对象保存"hello".
String str=new String ("hello") 就是不管内存里是不是已经有"hello"这个对象,
都新建一个对象保存"hello"
String a = new String("ab");是在堆里面建立的对象 String,a和"ab"
aa="ab";是查找栈里有没有"ab",如果有就用aa引用它,如果没有就把“ab”存进栈

但是今天看了一下API文档,其中说到(中文翻译)
因为 String 对象是不可变的,所以可以共享!这个为上面的理解提供了支撑,但是下面又写到
String str = "abc";
等效于:
    char data[] = {'a', 'b', 'c'};
   String str = new String(data);
这个问题是他的一个简单举例呢?还是我理解的不够呢?
分享到:
评论

相关推荐

    Intro to String Theory

    该公式的成功促使物理学家们开始探索更深层次的弦理论。 #### 2. 经典弦理论 经典弦理论探讨了弦作为一维对象的运动。弦可以是开放的也可以是闭合的,其动力学由弦的张力决定。经典弦理论主要研究弦的振动模式及其...

    C# 压缩解压缩

    本文将深入探讨如何使用C#实现文件和文件夹的压缩与解压缩功能,特别是通过递归方式进行操作。 首先,C#本身并不直接支持文件压缩,但可以借助.NET Framework或.NET Core中的第三方库,如System.IO.Compression命名...

    C# zip文件解压缩

    public static void Unzip(string zipFilePath, string destinationPath) { using (var zipStream = File.OpenRead(zipFilePath)) { using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Read)) { ...

    深度宽度优先搜索八数码.pdf

    #include <string.h> #include typedef long UINT64; typedef struct { char x; // 位置x 和位置y 上的数字换位 char y; // 其中x 是0 所在的位置 } EP_MOVE; #define SIZE 3 // 8数码问题,理论上本程序也可...

    A*算法 八数码 启发搜索

    struct P{ int d; //深度g(n) int w; //不在位数h(n) ... //从起点开始记录解路径 int father[10000000]; //记录该节点的父节点 int top=0; //stack的指针 priority_queue<P> pq; //open表 map<string,bool> mp;

    【源代码】明解Java-UTF-8.rar

    《明解Java-UTF-8》是一门针对Java编程语言和UTF-8编码的课程,其课后提供的源代码旨在帮助学习者巩固所学知识,适用于初学者和希望深入理解Java的同学。UTF-8是一种广泛使用的字符编码标准,能够表示Unicode字符...

    数据结构与算法-回溯算法

    它通过不断尝试来寻找问题的解,并在遇到不可行解时返回之前的决策点,调整策略继续探索。这种方法特别适用于解决组合优化问题。 **基本思想:** 1. **定义解空间:** 明确问题所有可能解的集合。这些解可能以树形...

    資料結構與演算法 leetcode, lintcode 題解

    ### 資料結構與演算法 leetcode, lintcode 題解 #### 目錄概述 該文件似乎是一個資料結構與演算法練習題目的解決方案匯編,主要聚焦於LeetCode和LintCode這兩個知名的線上編程平臺。從內容來看,它被分為兩大部分...

    全排列算法 全排列算法 (c#版)

    同时,它还可以与其他算法结合,如回溯法求解棋盘覆盖问题,或在搜索树中寻找最优解。 了解并掌握全排列算法对于提升C#程序员的算法能力和解决问题的技巧至关重要。实践中,可以根据具体需求调整算法,比如优化性能...

    c#面试时一个题的测试

    而在大多数常规情况下,为了代码的可读性和简洁性,`string.IsNullOrEmpty()`往往是最优解。 总结,C#中判断字符串是否为空的方法有多种,开发者应根据具体需求和项目环境选择合适的方法。在面试中展示对这些细节的...

    回溯法入门学习之一

    4. **深度优先搜索**:沿着选择的节点向下搜索,也就是尽可能深地探索路径。 5. **回溯**:如果当前路径无法导出有效解,就撤销最后一步(回溯),并尝试其他路径。 在本例中,我们有一个名为"Main.java"的文件,这...

    Java回溯法求分割回文字符串源码

    回溯法是一种试探性的解决问题的方法,它尝试通过不断地尝试所有可能的解决方案,并在尝试过程中逐步排除不可能的解,直到找到一个可行解或证明所有解都是不可行的为止。这种方法通常与深度优先搜索(DFS)相结合。 ...

    深搜巧解数独(C语言版)

    程序首先包含了必要的头文件`stdio.h`和`string.h`,用于输入输出和字符串处理。接着定义了两个全局数据结构:`struct node`用于存储待填充的位置坐标;`char map[10][10]`用于表示数独的当前状态。此外,还定义了多...

    json反序列化

    标签“通用类”意味着这些JSON反序列化的概念和方法适用于大多数C#项目,而“zip”可能是指这个示例是作为压缩包的一部分提供的,通常在项目中使用时,需要先解压缩才能访问这些文件。 总之,JSON反序列化是C#开发...

    lzss压缩解压缩算法。

    解压缩时,根据索引和长度,从已解压的数据中复制相应长度的字符串,从而恢复原始数据。 **C++实现** 在C++中,LZSS的实现通常包括以下步骤: 1. 初始化字典:创建一个固定大小的缓冲区,作为字典。 2. 扫描输入...

    通达信TDX高级行情L2登录 连接器

    通达信TDX高级行情L2登录连接器是金融数据领域的关键组件,主要服务于股票、期货等金融市场,为投资者提供实时、高效的二级市场深度数据。本文将深入解析这个连接器的功能、工作原理以及如何利用它获取和分析高级...

    用java实现的md5加密与例子

    public static String encryptMD5(String input) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new ...

    生成字符串的全排列,可以用回溯法实现

    回溯法是一种试探性的解决问题的方法,它在解决问题的过程中,尝试分步构造解,如果在某一步发现当前的尝试不能导致有效的解,就退回一步,改变之前的选择,再进行尝试,直到找到正确解或所有可能的尝试都失败为止。...

    数据结构浅解

    9. **字符串(String)**:字符串是字符的序列,可以视为特殊的数组。字符串处理涉及模式匹配、子串查找、字符串拼接等操作,字符串在文本处理、搜索引擎等领域发挥重要作用。 10. **文件系统(File System)**:...

    一个简单的递归调用的实例

    递归调用的基本思想是,一个问题的解可以分解为一个或多个与原问题相同但规模更小的子问题。如果这些子问题的解能通过同样的方式继续分解,最终会达到基本情况,即不再需要进一步分解的状态。在目录树的例子中,基本...

Global site tag (gtag.js) - Google Analytics