Tag: new operator

附加文件导致覆盖(Java)

所以我正在创建一个CSV文件,每次动作发生时我都想将数据写入文件。 我遇到的问题是它会在第二次进入时覆盖数据。 如何将数据添加到文件末尾? public boolean save_to_csv(){ //check if directory exists, if not create the folder File folder = new File(Environment.getExternalStorageDirectory() + “/HKA_CAL”); //Environment.getExternalStorageDirectory() get the location of external storage boolean success = true; if(!folder.exists()) { success = folder.mkdir(); } if (success) { //success is true if folder has successfully been created //now we can create/check […]

什么更有效率? 清空一个对象或创建一个新对象?

“新”有多贵? 我的意思是,我是否应该重新使用相同的对象,或者如果对象是“超出范围”,它与清空它是一样的吗? 例如,假设一个方法创建一个列表: List list = new ArrayList(); 在方法的最后,列表不再使用 – 它是否意味着没有分配给它的内存,或者它是否意味着有一个指向它的空指针(因为它是’创建’)。 或者,我可以向方法发送一个’list’,并在方法的末尾清空它: list.removeAll(list); 从记忆的角度来看会有什么不同吗? 谢谢!

new关键字用于创建对象而不分配对象引用

目前我在java中引用Thread类。所以我遇到了一个程序,其中创建了对象而没有引用对象reference.can任何人解释这个概念 这是代码 // Create a second thread. class NewThread implements Runnable { Thread t; NewThread() { // Create a new, second thread t = new Thread(this, “Demo Thread”); System.out.println(“Child thread: ” + t); t.start(); // Start the thread } // This is the entry point for the second thread. public void run() { try { […]

新Integer(123),Integer.valueOf(123)和123之间的差异

我看到代码(Java)是这样的: myMethod(new Integer(123)); 我目前正在重构一些代码,并且在Sonar工具中有一个提示,使用这样的内存更友好: myMethod(Integer.valueOf(123)); 但是在这种情况下,我认为如果我使用的话没有区别: myMethod(123); 我能理解,如果我将一个变量传递给该方法,但是硬编码为int? 或者如果有Long / Double等,我想要长数字表示。 但是整数?

在Java中不使用’new’关键字来声明数组

以下两个声明之间有什么区别吗? int arr[] = new int [5]; 和 int arr1[] = {1,2,3,4,5}; arr1是在堆栈上还是在堆上声明的?

JVM如何确保新对象的内存分配的线程安全性

让我们假设这将在一个真正的并行环境中同时发生,一个VM: // Thread 1: new Cat() // Thread 2: new Dog() // Thread 3: new Mouse() JVM如何确保堆上内存分配的线程安全性? 堆是所有线程的一个,它有自己的内部数据。 为简单起见假设一个简单的压缩垃圾收集器实现,-XX:+ UseSerialGC -XX:+ UseParallelGC,带有简单的增量指针,用于标记可用空间的开始和Eden(堆)中的一个连续可用空间。 当为Cat , Dog和Mouse实例分配堆空间时,线程之间必须存在某种同步,否则它们很容易最终被覆盖。 这是否意味着每个新运算符都隐藏在一些同步块中? 这样,许多“无锁”算法实际上并不完全无锁;) 我假设内存分配是由应用程序线程本身同步进行的,而不是由另一个专用线程进行的。 我知道TLAB或线程本地分配缓冲区。 它们允许线程在Eden中具有单独的存储区域以进行分配,因此不需要同步。 但我不确定TLAB是否默认设置,这是一个非常模糊的HotSpotfunction。 注意:不要混淆TLAB和ThreadLocal变量! 我还假设,对于更复杂的垃圾收集器,如G1或非压缩垃圾收集器,必须维护更复杂的堆结构数据,如CMS的空闲块列表,因此需要更多同步。 更新 :请让我澄清一下。 我接受HotSpot JVM实现的答案以及有和没有活动TLAB的变体。 更新 :根据我的快速测试 , TLAB在我的64位JDK 7上默认设置为串行,并行和CMS垃圾收集器,但不适用于G1 GC。

为什么“新”关键字比赋值更有效?

我有两种方法可以读取字符串,并创建Character对象: static void newChar(String string) { int len = string.length(); System.out.println(“Reading ” + len + ” characters”); for (int i = 0; i < len; i++) { Character cur = new Character(string.charAt(i)); } } 和 static void justChar(String string) { int len = string.length(); for (int i = 0; i < len; i++) { Character […]

C ++中的new运算符与java中的new运算符之间的区别

据我所知, new运营商做了以下事情:(如果我错了,请纠正我。) 分配内存,然后返回分配的内存的第一个块的引用。 (很明显,内存是从堆中分配的。) 初始化对象(调用构造函数。) 运算符new[]以类似的方式工作,除了它对数组中的每个元素执行此操作。 任何人都可以告诉我这两个运算符在C ++和Java中有何不同: 就他们的生命周期而言。 如果他们无法分配内存怎么办?

为什么String不需要新的关键字

我是java的新手。 在java中, String是一个class 。但是我们不必使用new关键字来创建类String的对象,其中new用于为其他类创建对象。 我听说过类似于Integer , Double Wrapper类。 但String不是Wrapper,不是吗? 实际上当我使用时发生了什么 String message = “Hai”; ?? 它有什么不同 String message = new String(“Hai”); 这是message引用变量还是其他什么? 还有其他类不需要new来创建对象吗?

`new`关键字的作用是什么

我正在线上学习Java教程,试图学习这门语言,并且它在两个使用数组的语义之间蹦蹦跳跳。 long results[] = new long[3]; results[0] = 1; results[1] = 2; results[2] = 3; 和: long results[] = {1, 2, 3}; 该教程从未真正提到为什么它在两者之间来回切换,所以我对该主题进行了一些搜索。 我目前的理解是new运算符正在创建一个“longs数组”类型的对象。 我不明白的是为什么我想要那个,那有什么后果呢? 除非它是“数组对象”,否则某些“数组”特定方法不适用于数组? 有什么我不能用“数组对象”我可以用普通数组做吗? Java VM是否必须清理使用new运算符初始化的对象,而这些对象通常不必执行此操作? 我来自C,所以我的Java术语在这里可能不正确,所以如果有些事情是不可理解的,请要求澄清。