V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yidinghe
V2EX  ›  问与答

Java 面试题“变量名很长会不会影响执行效率”很难吗?

  •  
  •   yidinghe · 2018-09-21 09:33:48 +08:00 · 7762 次点击
    这是一个创建于 2015 天前的主题,其中的信息可能已经有所发展或是发生改变。
    40 条回复    2021-01-14 09:59:43 +08:00
    Lateautumn
        1
    Lateautumn  
       2018-09-21 09:35:11 +08:00
    会吗,
    lz234561
        2
    lz234561  
       2018-09-21 09:41:57 +08:00
    不会
    hoythan
        3
    hoythan  
       2018-09-21 09:42:43 +08:00
    不会
    simonliu2018
        4
    simonliu2018  
       2018-09-21 09:45:41 +08:00
    那么问题来了,变量名很长很长会影响什么效率?
    earther01
        5
    earther01  
       2018-09-21 09:45:50 +08:00
    java 不会,那么问题来了,python 会影响吗
    Sanko
        6
    Sanko  
       2018-09-21 09:45:55 +08:00 via Android
    很长是有多长
    night98
        7
    night98  
       2018-09-21 09:51:09 +08:00 via Android
    得看有多长,哈哈
    inframe
        8
    inframe  
       2018-09-21 09:52:12 +08:00 via iPhone
    python 走字典,复杂度是 hash
    lht260
        9
    lht260  
       2018-09-21 09:53:11 +08:00
    到低有多长?
    qinxi
        10
    qinxi  
       2018-09-21 09:55:37 +08:00
    @simonliu2018 打字效率
    yidinghe
        11
    yidinghe  
    OP
       2018-09-21 09:55:48 +08:00
    @simonliu2018 影响打字效率啊
    amon
        12
    amon  
       2018-09-21 09:57:58 +08:00
    效率可以忽略不计,因为编译时都会转成其它字符。
    xflicker
        13
    xflicker  
       2018-09-21 09:58:25 +08:00
    不会,但是占地方啊
    simonliu2018
        14
    simonliu2018  
       2018-09-21 09:58:26 +08:00
    语言的规范有变量长度限制说明。
    shiyouming91
        15
    shiyouming91  
       2018-09-21 10:00:15 +08:00 via iPhone
    看虚拟机实现了...不过一般而言对类加载有微小的影响。执行的时候局部变量不会,编译的时候都换成几号变量的数字了。成员变量会微小地影响调用成员变量的方法第一次执行的时候的速度,不过靠谱的虚拟机应该会在这个时候翻译成地址偏移量,因此以后就不会影响了。无论如何等 jit 预热好了就完全不影响了
    felixlong
        16
    felixlong  
       2018-09-21 10:01:04 +08:00
    @earther01 你确定不会? 其实某些地方应该是会的。有人用 reflector 访问你的变量了呢?
    shiyouming91
        17
    shiyouming91  
       2018-09-21 10:02:40 +08:00 via iPhone
    楼上说的对,也会影响反射的速度😂😂😂
    aihidao
        18
    aihidao  
       2018-09-21 10:04:50 +08:00 via Android
    再小的时间也是时间,
    滑稽脸
    yidinghe
        19
    yidinghe  
    OP
       2018-09-21 10:05:38 +08:00
    @simonliu2018
    @shiyouming91
    @felixlong
    我这里指的是本地变量或参数啊,跟类名成员名方法名无关,编译的时候都抹掉了。
    zhenghuiy
        20
    zhenghuiy  
       2018-09-21 10:06:29 +08:00 via iPhone
    问题是这道题有什么意义么,开发的时候取名应该是在“能不能见名知意”中纠结,而不是变量名的长短吧。比较规范是参考《代码大全》变量名的取名方式,但书中写的都挺长。。日常开发应该比规范得短。(当然你要强行说考这个是为了考察对方对编译过程的理解 balabala。。是在下输了)
    yidinghe
        21
    yidinghe  
    OP
       2018-09-21 10:07:39 +08:00
    @zhenghuiy 就是考虚拟机原理,不是考代码的优雅性。
    jason19659
        22
    jason19659  
       2018-09-21 10:18:41 +08:00
    你反问他,那你们的代码不加密吗?
    yidinghe
        23
    yidinghe  
    OP
       2018-09-21 10:39:27 +08:00
    @jason19659 首先那叫混淆,其次 Java 的混淆不是针对代码而是针对字节码的。
    x7395759
        24
    x7395759  
       2018-09-21 10:47:27 +08:00
    问 JVM 没必要问这个题目,直接问.java->.class 干了什么事情
    LukeChien
        25
    LukeChien  
       2018-09-21 10:53:18 +08:00 via Android
    反射也不影响
    hanangellove
        26
    hanangellove  
       2018-09-21 11:25:33 +08:00
    java 的函数调用原理是啥? 也是方法名作为 key,去全局的 map 中找到函数实现的指针地址吗?
    hpeng
        28
    hpeng  
       2018-09-21 11:57:17 +08:00 via iPhone
    用 Java8 开启编译参数,代码里反射获取参数名应该会有影响的。不过看你问的问题,答题的人估计都不知道你想问什么。
    bumz
        29
    bumz  
       2018-09-21 14:15:17 +08:00
    完全不会

    考点:Java 是编译为字节码执行
    aa6563679
        30
    aa6563679  
       2018-09-21 14:16:39 +08:00 via iPhone
    成员变量或参数变量影响一丢丢
    局部变量一点都没有
    uleh
        31
    uleh  
       2018-09-21 16:18:51 +08:00
    变成字节码了还有啥变量名啊。。
    除非是反射用到。。
    kaedea
        32
    kaedea  
       2018-09-21 19:03:05 +08:00 via Android
    不会。问这个还不如问变量名最长能多长。
    yemenchun1
        33
    yemenchun1  
       2018-09-21 19:38:18 +08:00
    C 的话, C 语言连好头文件以后吗, 首先编译成汇编语言, 这里面应该是不会变变量名的, 而后汇编语言转换成二进制, 这里就没有变量名什么事儿了, 执行的时候就不会影响速度. 但是编译的时候大概可能会影响速度, 要看编译器的优化程度了, 据说 Intel 自己的编译器比较牛.
    xhystc
        34
    xhystc  
       2018-09-21 19:42:51 +08:00 via Android
    会,当通过反射访问参数名时,如果参数名长达几个 g 肯定会影响效率的
    zwh2698
        35
    zwh2698  
       2018-09-21 22:18:02 +08:00 via Android
    词法分析器的效率
    bobuick
        36
    bobuick  
       2018-09-21 22:24:08 +08:00
    语言有限制,说几个 G 的变量,是什么鬼
    maokabc
        37
    maokabc  
       2018-09-22 06:06:23 +08:00 via Android
    本地变量编译成 class 后都是 iload,istore,aload,astore 之类没影响,域变量这些还是有影响
    lengyihan
        38
    lengyihan  
       2018-09-22 15:12:02 +08:00 via Android
    会肯定会的,事物只要有变化,就肯定会产生影响。只是有些影响是可以忽略不计的。如果面试者是一个有着唯物辩证观的人,像我这样,就很为难了。题目不怎么好。
    darkcode
        39
    darkcode  
       2018-09-23 07:37:30 +08:00
    @qinxi
    @yidinghe
    他问的是执行效率
    jacklau
        40
    jacklau  
       2021-01-14 09:59:43 +08:00
    影响的是开发的效率(多敲 n 个子母),只是内存地址的代号,最终到执行阶段都是要舍弃的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1643 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:48 · PVG 00:48 · LAX 09:48 · JFK 12:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.