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 字面值与变量相加,会在堆区产生一个新的对象,因此就有一个地址值

  • 相关阅读:
    laravel 生成key
    nginx thinkphp5 多入口配置
    php微信退款通知 解密
    微信退款 报错 SSL certificate not found: cert/apiclient_cert.pem
    laradock 进入 工作区
    laradock mysql 报错 No such file or directory,Connection refused
    mac 安装数据库管理软件 sequel-pro
    docker windows7 安装
    [USACO10FEB] 吃巧克力Chocolate Eating (二分答案)
    P1613 跑路 (最短路,倍增)
  • 原文地址:https://www.cnblogs.com/hjy9420/p/4174610.html
Copyright © 2011-2022 走看看