zoukankan      html  css  js  c++  java
  • 2015年阿里实习Java开发上机笔试题

    下列Java代码中变量a、b、c分别在内存的()存储区存放。

    class A{
        private String a = "a";
        
        public boolean methodB(){
            String b = "bb";
            final String c = "cc";
        }
        
    }

    A:堆区、堆区、堆区

    B:堆区、栈区、堆区

    C:堆区、栈区、栈区

    D:堆区、堆区、栈区

    E:静态区、栈区、堆区

    F:静态区、栈区、栈区

    解析:

      a属于A类的成员变量。在String a = "aa"涉及对象实例到在堆上给"aa"分配内存。《深入理解Java虚拟机》Java堆区域唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

      在《深入理解Java虚拟机》中虚拟机栈描述的是Java方法执行的内存模型:每一个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链表、方法出口等信息。每一个方法从调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

      局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。注意:基本数据类型不包括String。这里可以肯定b变量在内存的栈存储区存放。

      至于final修饰String感觉有些多余,因为String本身就是一个final型,故c变量在内存的栈存储区存放。

    分享此题解法,不知道这样理解对不对,如若有问题大家一起来讨论。

  • 相关阅读:
    感觉博客又要停一停了
    dockManager 添加DockPanel控件
    C# 线性渐变圆
    【Axure】母版引发事件
    【系统问题】windows10打印就蓝屏-报错误代码“win32kfull.sys”
    论扇形的绘制方式
    字符串可以使用substring等方法的原因解析
    深入理解作用域链
    实现fn(1,2)(3)(4).getSum(),使得最后输出值为实参的和即10
    函数里面for循环延迟打印引发的闭包问题
  • 原文地址:https://www.cnblogs.com/chuji1988/p/4390231.html
Copyright © 2011-2022 走看看