相关疑难解决方法(0)

StringBuilder/StringBuffer与"+"运算符

我正在阅读" 更好,更快,更轻的Java "(由Bruce Tate和Justin Gehtland撰写)并且熟悉敏捷类型团队的可读性要求,例如Robert Martin在其清晰的编码书中所讨论的内容.在我现在的团队中,我被告知明确不使用+运算符,因为它在运行时创建了额外的(和不必要的)字符串对象.

但是这篇文章,写于04年,讨论了对象分配是关于10个机器指令的.(基本上免费)

它还讨论了GC如何帮助降低此环境中的成本.

什么是使用之间的实际性能的权衡+,StringBuilder还是StringBuffer?(就我而言,它StringBuffer仅限于Java 1.4.2.)

StringBuffer对我来说导致丑陋,不太可读的代码,正如Tate的书中的几个例子所示.而且StringBuffer是线程同步的,这似乎有它自己的成本是大于中使用了"危险" +操作.

思想/意见?

java performance readability

35
推荐指数
3
解决办法
3万
查看次数

在Java源代码中为字符串实现`+`在哪里?

String是Java中的一个特例.这是一个类,我可以在源代码中检查它,但它也有自己的中缀运算符+,它似乎是语法糖StringBuilder.

例如,

"Hello " + yourName;
Run Code Online (Sandbox Code Playgroud)

可能成为

new StringBuilder().append("Hello ").append(yourName).toString();
Run Code Online (Sandbox Code Playgroud)

Java中没有用户定义的运算符,所以在哪里+指定String

是否可以使用相同的机制来制作其他运算符,例如向量?

java string string-concatenation operators

35
推荐指数
3
解决办法
3246
查看次数

将String作为变量连接到Character vs与其他String连接时有什么区别?

当我看到这样的东西(伪1线):

str1 + "a" + str2
Run Code Online (Sandbox Code Playgroud)

是否比以下(伪1线)更糟(或更好/相等)?

str1 + 'a' + str2
Run Code Online (Sandbox Code Playgroud)

更新:更好的例子(由@QPaysTaxes提供)以减少关于我原始示例的混淆.

我尝试了什么: 过去10年编程Java的各种东西,但我从来没有真正看到底层的东西 - 例如我会假设第二个稍微"更快/更好",因为没有为其创建的String-Object Java的斜杠标志和/或垃圾收集器必须处理更少.我曾经为Java证书做好准备,可能本来可以在那个时候更好地争论,但是我的日常业务似乎也是关于Java的"理论"必须保持最新...我知道没有任何比我indexOf('c')应该使用的假设更好的解释而不是indexOf("C")我想知道是否相同的字符串连接.

我也搜索了一下,但由于我的标题可能暗示我不太好描述我正在寻找的没有例子.对此我很抱歉,这个差点的可能性只是产生了重复.

我将尝试: 基于这里接受的答案字符串连接:concat()vs"+"运算符我希望能够有一个开始看到底层的什么,有一天能够争论/回答这样的问题,深入了解.

java string performance operator-keyword

22
推荐指数
3
解决办法
2135
查看次数

+运算符对Java中的数字和字符串的行为有何不同?

Java没有运算符重载的概念.

Still +运算符表现为带数字的加法运算符,并将运算符与字符串连接起来.这类似于运算符重载行为.

那么,Java是否有运算符重载?

java

13
推荐指数
4
解决办法
843
查看次数

Java中的String运算符

几分钟前我看到了这个问题,并决定查看java String类来检查+运算符是否有一些重载.

我找不到任何东西,但我知道我能做到这一点

String ab = "ab";
String cd = "cd";
String both = ab + cd; //both = "abcd"
Run Code Online (Sandbox Code Playgroud)

实施的地方在哪里?

java string operator-overloading string-concatenation

7
推荐指数
3
解决办法
9568
查看次数

Java:字符串文字和+运算符

import java.util.*;
import java.lang.*;
import java.io.*;    

class Test {
   public static void main (String[] args)  {

      String a="hello"+"world";  //line 1
      String b="hello";
      String c="world";
      String d=b+c;
      String e="helloworld";
      System.out.println(e==a);
      System.out.println(a==d);
     }
}
Run Code Online (Sandbox Code Playgroud)

输出:

true

false
Run Code Online (Sandbox Code Playgroud)

从这个讨论中,String类如何覆盖+运算符?我知道'a'和'e'将引用相同的String文字对象.

有谁能告诉你

  1. 为什么ad不是指同一个字符串文字对象?

  2. 第1行创建了多少个对象

java string

7
推荐指数
1
解决办法
1706
查看次数

java中的字符串初始化和连接

在我的应用程序中一切正常,但我想提高性能并优化我的代码.

这两个中哪一个更好

1.initialisation

String str1=new String("Hello");
String str2="Hello";
Run Code Online (Sandbox Code Playgroud)

2.concatenation

System.out.println(s1 + s2);
System.out.println(new StringBuffer(S1).append(s2));
Run Code Online (Sandbox Code Playgroud)

java performance

3
推荐指数
1
解决办法
1695
查看次数

Java中'String'运算符的实现是什么?我可以看到这个实现?

任何人都可以告诉我Java中String的'+'运算符的确切实现.我知道这是concat运算符连接两个字符串,即使那时因为String是一个类,那么这个运算符的实现在哪里以及它是如何工作的?

java

0
推荐指数
1
解决办法
522
查看次数

如何从整数到char的隐式类型转换在Java中工作(Java基础知识)

所以在这个基本的Java程序中,

public class HelloWorld{
    public void testFunc(){
        System.out.println("Class = "+this);
    }

    @Override
    public String toString(){
        return "TEST";
    }


    public static void main(String[] args){
        int i = 5;
        HelloWorld hw = new HelloWorld();
        System.out.println("Hello, World");
        hw.testFunc();
        System.out.println(i);
    }
}  
Run Code Online (Sandbox Code Playgroud)

该行System.out.println(i);自动将其转换int i为a String.我认为任何需要String类型参数的函数都会在java中自动执行此转换(与C中不同).但是,如果我在Android
Toast.makeText(getApplicationContext(), i, Toast.LENGTH_SHORT).show();
中尝试将其i声明为int扩展活动类中的一个,则应用程序会在启动时崩溃.那么这种转换在Java中是如何工作的呢?

java android

0
推荐指数
1
解决办法
543
查看次数