zoukankan      html  css  js  c++  java
  • java基础

    第一篇:讲讲String

    public static void main(String[] args) {

    String s1 = new String("hello");//2个对象
    String s2 = "hello";//没有创建
    String s3 = new String("hello");//1个对象
    String s4 = "hello";//没有创建
    //因此上面只产生了3个对象 字符串池1个,堆2个

    //这里每次赋值的时候,首先都会判断字符串池里面有没这个字符串值,如果有,则引用存在的,如果没有,则创建。

    //上面的解释:String是有一个叫字符串池,首先会判断字符串池里面是否有这个字符串,如果没有,则在字符串池创建一个字符串,并且由是s1指向他,然后有new操作符,就在堆内存创建一个对象,值为hello,并且也是s1指向了他。
    //第二条是判断字符串池了有没这个值的字符串,有,不在字符串池创建,直接有s2指向了hello值的内存地址,相当于是s1和s2在字符串池都指向了同一块内存地址,值为hello
    //第三条只在堆内存中创建一个对象,s3同时指向了字符串池和堆内存的地址,值都为hello



    //==比较的是内存地址值
    System.out.println(s1==s2);//false
    System.out.println(s2==s3);//false
    System.out.println(s1==s3);//false
    System.out.println(s4==s2);//true 都指向了字符串池的"hello"
    System.out.println(s1.intern()==s4);//true String的intern()方法(表示其字符串池中字符串的地址)
    System.out.println(s1.intern()==s3);//false


    String hello = "AYEP";
    String yep = "YEP";

    System.out.println(hello=="A"+"YEP");//true 字面值常量相加等于直接相加然后在字符串池存储
    System.out.println(hello=="A"+yep);//false 字面值与变量相加,会在堆区产生一个新的对象,因此就有一个地址值

  • 相关阅读:
    iOS NSDictionary或NSArray与JSON字符串相互转换
    iOS 如何用Xib画一个Button
    iOS 你不知道的字符串用法
    IOS ScrollView pagingEnabled移动指定偏移
    TableView行缩进 自定义cell时候
    支付宝回调
    微信支付回调
    关于Bundle传递消息
    关于Handler
    ExpandableListView
  • 原文地址:https://www.cnblogs.com/hjy9420/p/4174610.html
Copyright © 2011-2022 走看看