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

  • 相关阅读:
    最小生成数kruskal算法和prim算法
    图的表示及遍历
    mysql忘记root用户密码重置密码的方式
    dwr2.0版本的demo
    web.xml中不同版本的servlet头以及版本控制
    初学jboss
    Filter学习总结,顺便提及点servlet3.0异步filter和异步监听
    监听器
    问题发现和解决
    linux学习
  • 原文地址:https://www.cnblogs.com/hjy9420/p/4174610.html
Copyright © 2011-2022 走看看