zoukankan      html  css  js  c++  java
  • String对象之间的比较

    
    
    public class StringTest {
        
        @Test
        public void test01() {
            int a = 50; // 基本数据类型比较的是值
            int b = 50;
            System.out.println(a == b);
        }
    
        @Test
        public void test02() {
            /**
             * 01.首先在栈中开辟一个空间给a
             * 02.去常量池中查询有没有“123”,如果没有创建一个  
             * 03.a指向常量池中“123”
             */
            String a = "123";
            /**
             * 01.首先在栈中开辟一个空间给b
             * 02.去常量池中查询有没有“123”,发现有!
             * 03.b直接指向常量池中“123”
             */
            String b = "123";
            System.out.println(a == b);
        }
    
        @Test
        public void test03() {
            String a = "123";
            /**
             * 01.首先在栈中开辟一个空间给b
             * 02.去常量池中查询有没有“123”,发现有!
             * 03.不会在常量池中创建“123”,但是会在堆中创建“123”
             * 04.只要是new,b就会指向堆中“123” 
             */
            String b = new String("123");
            System.out.println(a == b);
        }
    
        @Test
        public void test04() {
            String a = "1" + "2"; // 在编译期间a="12"
            String b = "12";
            System.out.println(a == b); // true
        }
    
        @Test
        public void test05() {
            // a 和 b都是一个变量!!! 运行期间可以改变!
            String a = "1";
            String b = "2";
            String c = a + b; // 在编译期间 a 和 b的值 不确定!
            String d = "12";
            System.out.println(c == d); // false
        }
    
        @Test
        public void test06() {
            // a 和 b都是一个常量!!! 运行期间不可以改变!
            final String a = "1";
            final String b = "2";
            String c = a + b; // 在编译期间 a 和 b的值 不确定!
            String d = "12";
            System.out.println(c == d); // true
        }
    测试代码
    
    
    


    public
    class StringTest { /* * equals 和 ==的区别 * 如果类中没有重写equals(),那么默认比较也是内存地址 * ==在基本数据类型中比较的是值! * int a =10; * int b=10; * syso(a==b); true * 在引用数据类型中比较的是地址! * * 为什么说 基本数据类型 ,对象和数组的引用 都存在栈中?? * 因为栈最大的优势: 存取的速度快! * * Student stu=new Student(); * stu: 对象的引用 栈中 * new Student(): 对象 堆 * new出来的数据都是存放在堆中! */ @Test public void test01(){ String a ="abc"; String b =new String("abc"); System.out.println(a==b); //false /* * 01.首先会在栈中开辟一块空间给a * 02.去常量池中查询有没有"abc" * 03.因为没有"abc",所以在常量池中开辟一块空间给"abc" * 04.栈中的a 指向了 常量池中 "abc" * 05.会在栈中开辟一块空间给b * 06.去常量池中查询有没有"abc",发现有了,就不会在常量池中创建 * 07.去堆中开辟一块空间存放"abc" * 08.栈中的b 指向了 堆中 "abc" * 09. 地址不一样 所以结果 false */ } @Test public void test02(){ String a ="abc"; String b ="abc"; System.out.println(a=="abc");//true System.out.println(a==b); //true } @Test public void test03(){ String a ="abc"; String b ="a"+"bc"; System.out.println(a==b); //true } @Test public void test04(){ String a ="abc"; String b ="a"; String c ="bc"; System.out.println(a==(b+c)); //false /* * 01.a的值是"abc" * 02.编译期间 b ="a" c ="bc" 这个值 随时都可能改变!! * 03.在编译期间(b+c)不会被优化成“abc” 就是因为值不确定 */ } @Test public void test05(){ String a ="abc"; final String b ="a"; final String c ="bc"; System.out.println(a==(b+c)); //true /* * 01.a的值是"abc" * 02.编译期间 b ="a" c ="bc" 这个值不可能改变!! * 03.在编译期间(b+c)被优化成“abc” 就是因为值确定 final修饰的不可变 */ } @Test public void test06(){ String a =new String("abc"); //创建了几个对象? } }

     参数传递

    public class StringTest {    
     public static void main(String[] args) {
            /*String  str=new String("abc");
            getString(str);
            System.out.println(str);  //String在作为参数传递时  传递的是值    abc*/     
         
             StringBuffer buffer=new StringBuffer("abc");
             getString(buffer);  //传递的是地址
             System.out.println(buffer);  //abchaha
        }
    
         //方法重载
        private static void getString(String str) {
            str=str+"haha";
        }
        
        private static void getString(StringBuffer str) {
            str=str.append("haha");
        }
    }
  • 相关阅读:
    elementUI的table分页多选,记住上一页并勾选中,:row-key的使用方法
    如何在vue中使用svg
    父子组件传值,子组件接收不到值,并且无法动态更改video的视频源进行视频播放
    vue项目中如何使用dataform向后台传值
    'eslint'不是内部或外部命令,也不是可运行的程序
    小程序点击分享open-type="share"触发父元素怎么解决?
    vue项目启动报错Module build failed: Error: No PostCSS Config found in:
    eslint在webstorm中有错误警告
    微信小程序 image图片组件实现宽度固定 高度自适应
    JAVA设计模式学习--代理模式
  • 原文地址:https://www.cnblogs.com/999-/p/6027689.html
Copyright © 2011-2022 走看看