4.Java----String类

//当string使用字面量赋值时,字符串保存在字符串常量池中(常量池中不会有重复的字符串)
//当string使用new赋值时,和平常的对象一样,字符串保存在堆中
//所以str1 和 str2 保存的地址值相同,而 str1 和 str3 保存的地址值不同
public class StringTest {
    public static void main(String[] args) {
        String str1 = "test";
        String str2 = "test";
        String str3 = new String("test");
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);

        //常量拼接是在常量池中操作,只要有变量,结果就是在堆中
        //所以s5和s3的地址值是相同的(常量池中不能存在两个一样的变量)
        //s4,s6有变量参与,相当于new,结果保存在堆中
        String s1 = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        String s4 = s1 + s2;
        String s5 = "hello" + "world";
        String s6 = s1 + "world";
        final String s9 = "hello";   //常量
        String s8 = s9 + "world";
        System.out.println(s3 == s4);  //false
        System.out.println(s3 == s5);  //true
        System.out.println(s4 == s6 ); //false
        System.out.println(s8 == s3); //true
        //jdk1.6中,使用intern()后,string对象只会引用或创建在字符串常量池中的对象
        //jdk1.7后,使用intern()后,string对象需要注意引用的是字符串常量池还是堆中的对象(在常量池的话就是引用的常量池中的对象,堆中的话就是引用堆中的)
        //概括:intern()方法设计的初衷就是为了重用string对象,来节省内存消耗
        String s7 = s4.intern();//返回值为常量池中已经存在的值
        System.out.println(s7 == s3); //true

        String s = new String("1") + new String("2");
        System.out.println(s.intern() == s);
    }
}
//由于字符串的不可变性,每次重新赋值的时候,如果常量池中没有,都会
//在常量池中创建一个,此时局部变量的str指向了“test2”,而main中的str还是指向“test”
public class StringTest2 {
    public static void main(String[] args) {
        String str = "test";
        char[] s ={'t','e','s','t'};
        exchange(str,s);
        System.out.println(str);
        System.out.println(s);
    }
    public static void exchange(String str,char[] s) {
        str = "test2";
        System.out.println(str);
        s[0] = 'b';
    }
}
结果
test2
test
best

因为当main中的str传入到exchange中时,exchange中的str和main中的str是两个不同的变量,但是指向的是同一个地址,而当exchange中给str重新赋值时,由于在常量池中没有找到“test2”,所以会在常量池中创建一个“test2”,并让exchange中的str指向它。

包装类和string之间的转换
public class StringTest3 {
    public static void main(String[] args) {
        //string类型转包装类、基本类型
        String s = "123";
        int i = Integer.parseInt(s);
        System.out.println(i);
        //基本类型转string
        String s1 = String.valueOf(i);
        System.out.println(s1);
        //string转换为char[]
        char[] chars = s1.toCharArray();
        for (char o : chars) {
            System.out.println(o);
        }
        //string转换为byte[]
        String s2 = "abc";
        byte[] bytes = s2.getBytes();//使用默认的字符集进行转换
//        try {
//            byte[] bytes1 = s2.getBytes("utf-8");
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
        System.out.println(Arrays.toString(bytes));
//        for (byte aByte : bytes) {
////            System.out.println(aByte);
////        }
        //解码
        System.out.println(new String(bytes));
    }
}
StringBuffer和StringBuilder

StringBuffer中的方法大多是同步方法,线程安全,但速度较慢
StringBuilder线程不安全,但是速度较快
与String相比,这两个是可变的

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355

推荐阅读更多精彩内容

  • 从网上复制的,看别人的比较全面,自己搬过来,方便以后查找。原链接:https://www.cnblogs.com/...
    lxtyp阅读 1,346评论 0 9
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 831评论 1 6
  • 前言 RTFSC (Read the fucking source code )才是生活中最重要的。我们天天就是要...
    二毛_coder阅读 455评论 1 1
  • 每个基本类型封装类都有将string转换为基本数据类型的方法对于非常大的数字请使用Long,代码如下* 将char...
    暖熊熊阅读 1,788评论 0 3
  • 很难想象当白羊座妈妈遇上巨蟹座儿子会发生什么样的化学反应。不过我总觉得既然是上帝如此安排我们母子的这种缘分,...
    李天煜阅读 816评论 0 0