从学习Java的第一天起,各个网站和许多老师都告诉我,阵列是连续的内存位置,可以存储所有相同类型的指定数量的数据.
由于数组是对象,对象引用存储在堆栈中,而实际对象存在于堆中,因此对象引用指向实际对象.
但是当我遇到如何在内存中创建数组的示例时,它们总是显示如下:
(其中对数组对象的引用存储在堆栈中,并且该引用指向堆中的实际对象,其中还有指向特定内存位置的显式索引)
但是最近我遇到了Java的在线笔记,其中他们声明数组的显式索引没有在内存中指定.编译器只是通过在运行时查看提供的数组索引号来知道去哪里.
像这样:
在阅读了笔记之后,我还在Google上搜索了这个问题,但是这个问题的内容要么很模糊,要么根本不存在.
我需要对此事进行更多澄清.数组对象索引是否明确显示在内存中?如果没有,那么Java如何在运行时管理命令转到数组中的特定位置?
给出的是英特尔8086处理器的汇编程序,它在数组中添加数字:
.model small
.stack 100h
.data
array dw 1,2,3,1,2
sum dw ?,", is the sum!$"
.code
main proc
mov ax,@data
mov ds,ax
mov di,0
repeat:
mov ax,[array+di]
add sum,ax
add di,2 ; Increment di with 2 since array is of 2 bytes
cmp di,9
jbe repeat ; jump if di<=9
add sum,30h ; Convert to ASCII
mov ah,09h
mov dx,offset sum ; Printing sum
int 21h
mov ax,4c00h
int 21h
main endp
end main
Run Code Online (Sandbox Code Playgroud)
上面的程序使用"base + index"寻址模式添加数组的数量.
可以通过以下方式执行相同的操作:
mov ax, …Run Code Online (Sandbox Code Playgroud) 问题出现在Android Studio 3.0中.
当我创建一个新项目时,一切正常,但过了一段时间后,错误
错误:org.gradle.tooling.BuildException:无法生成v1签名
开始自动出现,导致gradle失败.
当我使用--stacktrace运行它时,这是它向我显示的内容:
信息:Gradle任务[:app:assembleDebug]
错误:org.gradle.tooling.BuildException:无法生成v1签名
错误:java.io.IOException:无法生成v1签名
错误:java.security.InvalidKeyException:使用签名者"CERT"签名失败
错误:java.security.InvalidKeyException:无法使用SHA1withDSA进行签名
错误:java.security.InvalidKeyException:SHA-1摘要算法的安全强度不足以满足此密钥大小
信息:1秒内失败
5个错误0个警告
我正在使用Windows 10 X64和JDK 8 X64.
任何帮助解决这个问题将不胜感激!