• Java 值传递与引用传递


     @Test
        public void testChangeStudents() {
            List<Student> students = new ArrayList<Student>() {{
                add(Student.builder().age(50).build());
                add(Student.builder().age(100).build());
            }};
            filterStudent1(students);
            //结果不变 因为改变的是传给filterStudent1的新的引用指向
            System.out.println(ObjectMapperUtils.toJSON(students));
            filterStudent2(students);
            System.out.println(ObjectMapperUtils.toJSON(students));
            changeStudents(students);
            System.out.println(ObjectMapperUtils.toJSON(students));
        }
    
        private void filterStudent1(List<Student> students) {
            //传入这里的students 是从对象上复制出来的一个地址,和调用方不是一个引用;改变这个引用的指向不会影响调用方持用的引用
            students = students.stream()
                    .filter(student -> student.getAge() > 50)
                    .collect(Collectors.toList());
        }
    
        private void filterStudent2(List<Student> students) {
            //但如果改变了引用的地址上对象的内容,则会影响对象。传入这里的引用和调用方持有的引用因为是同一个对象,所以调用方也看到了对象的变化
            students.remove(0);
        }
    
        private void changeStudents(List<Student> students) {
            //change 同理
            students.forEach(s -> s.setAge(s.getAge() + 1));
        }
    
        @Test
        public void testChangePeople() {
            Student s = Student.builder()
                    .age(1L)
                    .addr("xx")
                    .build();
            changePeople(s);
            System.out.println(s.getAge());
        }
    
        private void changePeople(Student s) {
            s.setAge(100L);
        }
    
  • 相关阅读:
    构建工具系列二--Grunt
    构建工具系列一--Travis-cli
    Windows平台下如何使用node.js显示系统盘符
    【译文】采用chrome的DevTool中TimeLine和profile工具提升Web app性能
    浏览器重绘和重排
    迁移oracle数据库至新分区
    模拟app上商品详情点击图片放大并且可以切换大图
    JavaScript 复制内容到剪贴板
    原生js ajax
    原型与原型链
  • 原文地址:https://www.cnblogs.com/greatLong/p/16379104.html
Copyright © 2020-2023  润新知