Java中的boolean(primitive)和Boolean(primitive wrapper)的默认值是什么?
我在Oracle的网站上读到了Java的类型擦除.
什么时候发生类型擦除?在编译时还是运行时?当班级加载?当类被实例化时?
很多站点(包括上面提到的官方教程)都说在编译时会发生类型擦除.如果在编译时完全删除了类型信息,那么当调用使用泛型的方法而没有类型信息或错误的类型信息时,JDK如何检查类型兼容性?
考虑以下示例:Say class A有一个方法,empty(Box<? extends Number> b).我们编译A.java并获取类文件A.class.
public class A {
public static void empty(Box<? extends Number> b) {}
}
Run Code Online (Sandbox Code Playgroud)
public class Box<T> {}
Run Code Online (Sandbox Code Playgroud)
现在我们创建另一个类B,该类empty使用非参数化参数(原始类型)调用该方法:empty(new Box()).如果我们编译B.java与A.class在类路径中,javac的是足够聪明,引发警告.所以A.class 有一些类型信息存储在其中.
public class B {
public static void invoke() {
// java: unchecked method invocation:
// method empty in class A is applied to given types
// required: Box<? extends java.lang.Number>
// found: …Run Code Online (Sandbox Code Playgroud) 请告诉我一个实时的情况来比较String,StringBuffer和StringBuilder?
我有2个矩阵,我需要将它们相乘,然后打印每个单元格的结果.一旦一个单元格准备就绪,我需要打印它,但是例如我需要在单元格[2] [0]之前打印[0] [0]单元格,即使[2] [0]的结果已经准备好了.所以我需要按顺序打印它.所以我的想法是让打印机线程等待,直到multiplyThread通知它正确的单元格已准备好打印,然后printerThread将打印单元格并返回等待等等.
所以我有这个线程来进行乘法运算:
public void run()
{
int countNumOfActions = 0; // How many multiplications have we done
int maxActions = randomize(); // Maximum number of actions allowed
for (int i = 0; i < size; i++)
{
result[rowNum][colNum] = result[rowNum][colNum] + row[i] * col[i];
countNumOfActions++;
// Reached the number of allowed actions
if (countNumOfActions >= maxActions)
{
countNumOfActions = 0;
maxActions = randomize();
yield();
}
}
isFinished[rowNum][colNum] = true;
notify();
}
Run Code Online (Sandbox Code Playgroud)
打印每个单元格结果的线程:
public …Run Code Online (Sandbox Code Playgroud) 我试图找到一种char从键盘输入的方法.
我试过用:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
Run Code Online (Sandbox Code Playgroud)
此方法不存在.
我试着把它c作为一个String.然而,它并不总是适用于所有情况,因为我从我的方法调用的另一种方法需要一个char输入.因此,我必须找到一种方法来明确地将char作为输入.
有帮助吗?
我正在研究一个稀疏矩阵类,需要使用一个数组LinkedList来存储矩阵的值.阵列的每个元素(即每个元素LinkedList)代表矩阵的一行.并且,LinkedList数组中的每个元素代表一列和存储的值.
在我的课堂上,我有一个数组的声明:
private LinkedList<IntegerNode>[] myMatrix;
Run Code Online (Sandbox Code Playgroud)
并且,在我的构造函数中SparseMatrix,我尝试定义:
myMatrix = new LinkedList<IntegerNode>[numRows];
Run Code Online (Sandbox Code Playgroud)
我最终得到的错误是
无法创建通用数组
LinkedList<IntegerNode>.
所以,我有两个问题:
IntegerNode是我创建的一个类.并且,我的所有类文件都打包在一起.
我正在谷歌搜索它似乎无法找到语法.我arraylist可能会以不同基于用户设置来填充,所以我初始化它
ArrayList<Integer> arList = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
而现在我想添加数百个整数,而不是一个一个地添加 arList.add(55);
我想转换String为Double数据类型.我不知道是否应该使用parseDouble或valueOf.
这两种方法有什么区别?
这两个声明有什么区别?
声明1:
ArrayList<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
宣言2:
List<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud) 我有一个通用的Collection,我试图找出如何排序其中包含的项目.我尝试了一些东西,但我不能让它们中的任何一个工作.
java ×10
arraylist ×2
collections ×2
generics ×2
arrays ×1
boolean ×1
char ×1
exception ×1
input ×1
java-threads ×1
oop ×1
sorting ×1
string ×1
type-erasure ×1