精华内容
下载资源
问答
  • java定义字符串数组

    2020-03-07 16:57:32
    各位大佬,java中怎么实现定义一个字符串数组,让每个索引对应一句话呀?(初学者(*^▽^*))3q~~
  • Java定义字符串

    千次阅读 2019-07-03 20:01:14
    因此也可以通过创建 String 类的实例来定义字符串。 不论使用哪种形式创建字符串,字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。 直接定义字符串 直接定义字符串是指使用...

    Java 中定义一个字符串最简单的方法是用双引号把它包围起来。这种用双引号括起来的一串字符实际上都是 String 对象,如字符串"Hello"在编译后即成为 String 对象。因此也可以通过创建 String 类的实例来定义字符串。

    不论使用哪种形式创建字符串,字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。

    直接定义字符串

    直接定义字符串是指使用双引号表示字符串中的内容,例如"Hello Java"、"Java 编程"等。具体方法是用字符串常量直接初始化一个 String 对象,示例如下:

     
    1. String str="Hello Java";

    或者

     
    1. String str;
    2. str="Heilo Java";


    注意:字符串变量必须经过初始化才能使用。

    例 1

    下面的实例演示了直接创建字符串的几种用法。

     
    1. String str="我是一只小小鸟"; //结果:我是一只小小鸟
    2. String word;
    3. word="I am a bird"; //结果:I am a bird
    4. word="<h1>to fly</h1>"; //结果:<h1>to fly</h1>
    5. word="Let\'s say that it\'s true"; // 结果:Let's say that it's true
    6. System.out.println(word);
    7. word="北京\\上海\\广州"; //结果:北京\上海\广州

    使用 String 类定义

    在 Java 中每个双引号定义的字符串都是一个 String 类的对象。因此,可以通过使用 String 类的构造方法来创建字符串,该类位于 java.lang 包中,作用域是 final。

    String 类的构造方法有多种重载形式,每种形式都可以定义字符串。下面介绍最常用的几种形式。

    1. String()

    初始化一个新创建的 String 对象,表示一个空字符序列。

    2. String(String original)

    初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列。换句话说,新创建的字符串是该参数字符串的副本。例如:

     
    1. String str1=new String("Hello Java");
    2. String str2=new String(str1);

    这里 str1 和 str2 的值是相等的。

    3. String(char[ ]value)

    分配一个新的字符串,将参数中的字符数组元素全部变为字符串。该字符数组的内容已被复制,后续对字符数组的修改不会影响新创建的字符串。例如:

     
    1. char a[]={'H','e','l','l','0'};
    2. String sChar=new String(a);
    3. a[1]='s';


    上述 sChar 变量的值是字符串"Hello"。 即使在创建字符串之后,对 a 数组中的第 2 个元素进行了修改,但未影响 sChar 的值。

    4. String(char[] value,int offset,int count)

    分配一个新的 String,它包含来自该字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被赋值,后续对字符数组的修改不会影响新创建的字符串。例如:

     
    1. char a[]={'H','e','l','l','o'};
    2. String sChar=new String(a,1,4);
    3. a[1]='s';


    上述 sChar 变量的值是字符串"Hello"。该构造方法使用字符数组中的部分连续元素来创建字符串对象。offset 参数指定起始索引值,count 指定截取元素的个数。创建字符串对象后,即使在后面修改了 a 数组中第 2 个元素的值,对 sChar 的值也没有任何影响。

    展开全文
  • 字符串定义定义不分配内存空间,不做任何操作; 字符串初始化 两种方式直接等号赋值,用new初始化,直接等号赋值放入内存池,其它变量也可以引用;new初始化分配内存空间,不可引用; 字符串赋值为null ...

    1、概述:

    字符串定义 只定义不分配内存空间,不做任何操作;

     

    字符串初始化 两种方式直接等号赋值,用new初始化,直接等号赋值放入内存池,其它变量也可以引用;new初始化分配内存空间,不可引用;

     

    字符串赋值为null 初始化了,并且有了引用,但是没有指向任何内存空间;

    2、详解:

    String s;和String s=null;和String s="a";有什么区别?


    第一个只是定义了一个String类型变量s,并没有给它赋初值,在Java中,默认在使用一个变量的时候必须赋予它初值(降低风险)。 
    第二个和第三个都定义了String类型变量s,并赋予它初值,只不过第二个赋予的值为null(空)罢了


    主要要理解的是
    String s; s为一个引用~~它不是对象   


    第一个是没有初始化的引用;   
    第二个为空引用;
    第三个是在字符串池里写入一个字符'a',然后用s指向它。


    String s;只是给s分配一个内存空间   
    String s=null;是分配的空间中存储的值为空值   
    String s="a";这句就不用我多说了分配的空间的值为字符a


    特别关注:String s="a"和String s=new String("a");是有本质上的区别的 
      
    前者是在字符串池里写入一个字符'a',然后用s指向它;
    后者是在堆上创建一个内容为"a"的字符串对象。
     

    1、双引号的方式
    String x = abcd;
    String y = abcd;
             
    System.out.println(x==y);//true
    System.out.println(x.equals(y));//true

    上面的输出结果:
    x==y 的结果为true 是因为通过双引号赋值的方式之后,x 和 y 都是指向同一个内存地址,他们的引用都是指向方法区中的同一个内容,引用地址是一样的, 当同一个String字面值无论被创建多少次,始终只有一个内存地址被分配,之后的都是这个String的拷贝,Java中称作“字符串驻留”,所有的字符串常量在编译之后都会自动的驻留。x = abcd这种方式创建的时候首先会查看字符串池中是否已经存在,存在就直接返回PermGen中的该String对象,否则就会创建一个新的String对象,之后再放进字符串池中。

    JVM里,考虑到垃圾回收(Garbage Collection)的方便,将 heap 划分为三部分: young generation (新生代)、 tenured generation(old generation)(旧生代)和 permanent generation( permgen )(永久代)


    字符串池是为了解决字符串重复的问题,生命周期长,它存在于 permgen 中。

    编译 Java 源代码时,源文件中出现的双引号内的字符串都被收纳到常量池中,用 CONSTANT_utf8_info 项存储着。

    JVM 中,相应的类被加载运行后,常量池对应的映射到 JVM 的运行时常量池中。其中每项 CONSTANT_utf8_info(也就试记录那些字符串的)都会在常量引用解析时,自动生成相应的 internal String,记录在字符串池中。

    2、构造器的方式
    String a = new String(abcd);
    String b = new String(abcd);
             
    System.out.println(a==b);//false
    System.out.println(a.equals(b));//true

    上面代码运行结果:

    a==b 为false 是因为通过new 构造器的方法创建之后,在heap堆中分别分配了两个内存地址。a 和 b 分别指向了堆中的两个不同的对象,不同的对象就会有不同的地址分配。

    下面这张图就很好的阐述了上面的两种情况:

     

     

    关注微信公众号和今日头条,精彩文章持续更新中。。。。。

     

     

    展开全文
  • Java定义字符串(2种方式)

    千次阅读 2020-07-19 11:09:00
    -直接定义字符串是指使用双引号表示字符串中的内容,例如“Hello Java”、“Java 编程”等。 String str="Hello Java"; String str; str="You are in my heart !"; 注意:字符串变量必须经过初始化才能使用。 2....

    1. 直接定义字符串

    -直接定义字符串是指使用双引号表示字符串中的内容,例如“Hello Java”、“Java 编程”等。


    String str="Hello Java";

    String str;
    str="You are in my heart !";

    注意:字符串变量必须经过初始化才能使用。


    2.使用 String 类定义

      1. String()
        初始化一个新创建的 String 对象,表示一个空字符序列。
      1. String(String original)
        初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列。换句话说,新创建的字符串是该参数字符串的副本。例如:
    String str1 = new String("Hello Java");
    String str2 = new String(str1);

    这里 str1 和 str2 的值是相等的。

    • 3.String(char[ ]value)
      分配一个新的字符串,将参数中的字符数组元素全部变为字符串。该字符数组的内容已被复制,后续对字符数组的修改不会影响新创建的字符串。例如:
    char a[] = {'H','e','l','l','0'};
    String sChar = new String(a);
    a[1] = 's';

    上述 sChar 变量的值是字符串“Hello”。 即使在创建字符串之后,对 a 数组中的第 2 个元素进行了修改,但未影响 sChar 的值。

    • 4.String(char[] value,int offset,int count)
      分配一个新的 String,它包含来自该字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被赋值,后续对字符数组的修改不会影响新创建的字符串。例如:
    char a[]={'H','e','l','l','o'};
    String sChar=new String(a,1,4);
    a[1]='s';

    上述 sChar 变量的值是字符串“ello”。该构造方法使用字符数组中的部分连续元素来创建字符串对象。offset 参数指定起始索引值,count 指定截取元素的个数。创建字符串对象后,即使在后面修改了 a 数组中第 2 个元素的值,对 sChar 的值也没有任何影响。

    展开全文
  • java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗。 这些是我要研究的方法: 使用+运算符 ...

    java字符连接字符串数组

    最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利?

    这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗。 这些是我要研究的方法:

    1. 使用+运算符
    2. 使用StringBuilder
    3. 使用StringBuffer
    4. 使用String.concat()
    5. 使用String.joinString.join新增功能)

    我还尝试了String.format()但是它是如此缓慢,以至于我暂时不在本文中介绍。

    在继续之前,我们应该分离两个用例:

    1. 将两个字符串串联在一起作为一个调用,例如在日志消息中。 由于这只是一个电话,您可能会认为性能几乎不是问题,但结果仍然很有趣,并且可以阐明该主题。
    2. 在一个循环中连接两个字符串。 在这里,性能更是一个问题,尤其是当循环很大时。

    我最初的想法和问题如下:

    1. +运算符是用StringBuilder实现的,因此至少在连接两个String的情况下,它应产生与StringBuilder类似的结果。 幕后到底发生了什么?
    2. 在所有类的设计目的都是为了连接Strings并取代StringBuffer之后,StringBuilder应该是最有效的方法。 但是,与String.concat()相比,创建StringBuilder的开销是多少?
    3. StringBuffer是连接字符串的原始类–不幸的是,其方法是同步的。 确实不需要同步,随后它被不同步的StringBuilder代替。 问题是,JIT是否优化了同步?
    4. String.concat()应该适用于2个字符串,但是在循环中是否可以正常工作?
    5. String.join()比StringBuilder具有更多的功能,如果我们指示它使用空的定界符来连接String,它将如何影响性能?

    我要解决的第一个问题是+运算符的工作方式。 我一直都知道它在幕后使用了StringBuilder,但是要证明这一点,我们需要检查字节码。

    如今 ,查看字节码最简单的方法是使用JITWatch ,这是一个非常出色的工具,旨在了解JIT如何编译您的代码。 它有一个很棒的视图,您可以在其中与字节码(如果要转到该级别,还可以是机器码)并排查看源代码。

    屏幕截图2015-02-17 at 17.27.46

    这是一个非常简单的方法plus2()的字节码,我们可以看到确实在第6行上创建了一个StringBuilder,并附加了变量a(第14行)和b(第18行)。

    我认为将其与StringBuffer的手工使用进行比较会很有趣,因此我创建了另一个方法build2(),结果如下。

    屏幕截图2015年2月17日在17.31.37

    此处生成的字节码不如plus()方法那么紧凑。 StringBuilder存储在变量高速缓存中(第13行),而不是仅留在堆栈上。 我不知道为什么会这样,但是JIT也许可以做到这一点,我们将不得不看看时机如何。

    无论如何,如果用plus运算符和StringBuilder将2个字符串连接在一起的结果显着不同,那将是非常令人惊讶的。

    我写了一个小型的JMH测试来确定不同方法的执行方式。 首先让我们看一下两个Strings测试。 参见下面的代码:

    package org.sample;
    
    import org.openjdk.jmh.annotations.*;
    import org.openjdk.jmh.infra.Blackhole;
    
    import java.util.UUID;
    import java.util.concurrent.TimeUnit;
    
    @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    @Fork(1)
    @State(Scope.Thread)
    public class LoopStringsBenchmark {
    
        private String[] strings;
    
        @Setup
        public void setupTest(){
            strings = new String[100];
            for(int i = 0; i<100; i++) {
                strings[i] = UUID.randomUUID().toString().substring(0, 10);
            }
        }
    
        @Benchmark
        public void testPlus(Blackhole bh) {
            String combined = "";
            for(String s : strings) {
                combined = combined + s;
            }
            bh.consume(combined);
        }
    
        @Benchmark
        public void testStringBuilder(Blackhole bh) {
            StringBuilder sb = new StringBuilder();
            for(String s : strings) {
                sb.append(s);
            }
            bh.consume(sb.toString());
        }
    
        @Benchmark
        public void testStringBuffer(Blackhole bh) {
            StringBuffer sb = new StringBuffer();
            for(String s : strings) {
                sb.append(s);
            }
            bh.consume(sb.toString());
        }
    
        @Benchmark
        public void testStringJoiner(Blackhole bh) {
            bh.consume(String.join("", strings));
        }
    
        @Benchmark
        public void testStringConcat(Blackhole bh) {
            String combined = "";
            for(String s : strings) {
                combined.concat(s);
            }
            bh.consume(combined);
        }
    }

    结果如下:

    屏幕+截图+ 2015-02-17 + at + 17.41.26

    显而易见的赢家是String.concat()。 毫不奇怪,因为它不必为每次调用创建StringBuilder / StringBuffer而付出性能损失。 虽然确实需要每次都创建一个新的String(这将在以后变得很重要),但是对于连接两个Sting的非常简单的情况,它更快。

    另一点是,尽管产生了额外的字节码,但正如我们预期的那样,plus和StringBuilder是等效的。 StringBuffer仅比StringBuilder慢一点,这很有趣,这表明JIT必须做一些魔术来优化同步。

    下一个测试将创建一个100个字符串的数组,每个字符串包含10个字符。 基准测试比较了将100个字符串连接在一起的不同方法所花费的时间。 参见下面的代码:

    这次的结果看起来完全不同:

    屏幕截图2015-02-17 at 17.54.37

    在这里,加号方法确实遭受了损失。 每当您遍历循环时,创建StringBuilder的开销就会减少。 您可以在字节码中清楚地看到这一点:

    屏幕截图2015-02-17 at 17.59.46

    您可以看到每次执行循环时都会创建一个新的StringBuilder(第30行)。 JIT应该发现这一点并能够对其进行优化是有争议的,但是事实并非如此,使用+变得非常慢。

    同样,StringBuilder和StringBuffer的性能完全相同,但是这次它们都比String.concat()快。 String.concat()在循环的每次迭代中创建新的String所付出的代价最终会增加,并且StringBuilder变得更加高效。

    给定可以添加到此方法的所有其他功能,String.join()的效果非常好,但是,正如预期的那样,对于纯串联而言,它不是最佳选择。

    摘要

    如果要在单行代码中连接字符串,则我将使用+运算符,因为它最易读,并且对于单个调用而言,性能实际上并不重要。 还要提防String.concat(),因为您几乎肯定会需要执行空值检查 ,而其他方法则不需要这样做。

    在循环中连接字符串时,应使用StringBuilder。 您可以使用StringBuffer,但我不一定在所有情况下都信任JIT来像基准测试中那样高效地优化同步。

    我的所有结果都是使用JMH取得的,并且都带有通常的健康警告

    翻译自: https://www.javacodegeeks.com/2015/02/optimum-method-concatenate-strings-java.html

    java字符连接字符串数组

    展开全文
  • ...后端技术精选 ...这里定义空字符串:是指的或是零长度的字符串。如果一个字符串只有空白字符,我们也称之为空字符串。 对于Java而言,空白字符串如空格、制表符等。 具体详情可以参考Java API: ...
  • 枚举定义 package com.scbd.bdpl.define.enumerate.code; import com.java.comn.assist.EnumDefine; import com.scbd.bdpl.support.annotation.AnnotationCodeType; /** * @author lp */ public enum STR ...
  • Java实现字符串逆序输出

    万次阅读 多人点赞 2018-11-22 14:52:46
    【题目描述】 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序...首先定义两个String字符串a,b,其中a用于存放正序的字符串,b用于存放逆序的字符串,然后在定义一个字符数组c,然后调用类库中的t...
  • 今天写个DEMO的时候碰到了个小麻烦,有关于题目所说的字符串这三者的区别,我觉得我真的是够了,居然会用得这么细,不过会了也好,碰到相关的问题就可以一言不合代码就开写!
  • java 正则为空字符串或符合定义规则

    千次阅读 2016-09-14 17:14:17
    1、该字段可以为 2、不为时,需要满足【汉字+字母+数字】--车牌号 如果在validtion @Pattern注解不加入同时满足这两个条件的正则,需要单独判断对象,影响代码简洁和效率。 网上多方搜索后发现如下正则可以...
  • java字符串数组的定义与使用

    千次阅读 2020-10-09 14:38:50
    转自:http://www.pinlue.com/article/2020/10/0504/0111276021425.html
  • Java字符串定义

    千次阅读 2019-07-12 10:53:56
    public class DemoList { public static void main (String[] args) { String s1 = "Hello ... //字符串定义的第一种方式 String s2 = new String("Hello World!"); //字符串定义的第二种方式 System.out...
  • Java基础知识(字符串与数组)

    千次阅读 2020-06-24 20:55:02
    5. 字符串与数组 5.1 字符串创建与存储的机制是什么 字符串声明与初始化主要有如下两种情况: 1.对于Strng s1=new String(“abc”)与String s2=new String(“abc”),存在两个引用对象s1,s2,两个内容相同的...
  • C++ 字符串 对象 C++ 字符串 对象 创建方法 C++ 字符串 对象 输出到控制台 C++ 字符串 拼接 C++ 字符串 方法调用 ( 栈内存对象 ) C++ 字符串 方法调用 ( 堆内存对象 ) C / C++ 字符串 完整代码示例
  • java程序实现字符串的替换、特定字符串与数值之间的相互转换 字符串的替换 replace()方法可以把指定的字符或字符串替换成为新的字符或字符串。 str.replace(被替换字符,替换之后的字符); 若是需要替换的新的字符串...
  • Java 定义长度为 0 的数组 / 数组

    万次阅读 2019-03-14 14:49:17
    int[] array = new int[0]; // 定义一个长度为 0 的数组 / 数组 Sring[] arr = new String[0];...有时数组里可能只有一个空字符串 "",这时数组长度是 1。这种情况也要注意判断。 if ( arr.length == 1 ...
  • java 实现json格式字符串定义

    千次阅读 2017-10-16 17:05:28
    都知道json有固定的格式,当我们定义一个json字符串数据时,由于双引号的格式需要转义容易引起错误。 例如:String param = "{\"page_size\":\"10\",\"page_index\":\"1\"}"; 最近发现用fastjson可以将map转...
  • java字符串添加字符Case 1: In a simple way we will learn how to add characters by using predefined methods. 情况1:以简单的方式,我们将学习如何使用预定义的方法添加字符。 With the help of Java ...
  • Java for循环 字符串拼接

    千次阅读 2020-05-28 13:33:25
    //在循环外面定义str String str = ""; for (int i = 0; i (); i++) { //不断相加 if (i != 0) { str += ","; } str += list.get(i); } //在循环外面取 System.out.println(str); } 展示: 或者: //list集合 List ...
  • 首先,我们需要明白三个词的概念:栈,堆,字符串常量池。 栈区:存放的是基本类型和引用类型的引用地址,不能存对象; 堆区:存放对象; 字符串常量池:在方法区,是独立于栈和堆的存储空间,用于存放常量; ...
  • 一、前言 前面,我们整体学习了有关文件操作方面的知识,实现了检测、新建、修改文件并写入或者复制移动的操作。本次学习的是有关字符串方面的操作...字符串广泛应用 在Java 编程中,在 Java字符串属于对象,Jav...
  • 1.实现以下2个接口 不能使用语言的基本分割组合函数(如 ... 1) 字符串拆分成数组,如"ab&&2"通过"&&"做分割符,分割得到字符串数组["ab", "2"] 2) 实现字符串组合,如["ab","2"]通过"&&"分隔符,组成字符串"ab&&2
  • java String类定义字符串两种方式

    万次阅读 2018-08-08 11:50:31
    Java中的字符串类String是程序中使用十分频繁而且在各大公司招聘笔试中必考的知识点之一。本文主要String的用法进行分析。  用String来定义一个字符串一般有两种方法:  1.String str=”hello world”;, 2.String ...
  • 总结 | Java字符串常用操作(方法)

    千次阅读 2020-05-03 18:17:43
    创建字符串 创建一个String对象,并初始化一个值。 String类是不可改变的,一旦创建了一个String对象,它的值就不能改变了。 如果想对字符串做修改,需要使用StringBuffer&StringBuilder类。 //直接创建方式 ...
  • char只能定义单个字符,那么重点来了,单个字符属于一个字符串吗? 网上有的说是,有的说不是,弄得很纠结。 还有,练习的时候,“char chara=。。”能行 ;为什么“char char a=。。”程序就报错,两个的区别就是一...
  • java字符串排序

    千次阅读 2019-08-09 19:29:18
    java字符串排序 今天收到一个公司的面试邀请,人还没去,直接面试题都发过来了,真仗义啊。哈哈哈,我看了一下面试题,难度还是挺高的,怪不得直接给我。 我大致看了一下关于java方面的面试题,我还是对其中一个编程...
  • java中的字符串排序

    万次阅读 2018-03-06 23:04:11
    要求:对 "abc","...字段进行排序,要求满足其为升序排列同时每个字符串里也是升序排列 public class Test { public static void main(String[] args) { String[] str = new String
  • Java字符串数组初始化和赋值

    万次阅读 2017-04-29 09:10:37
    原文地址:...//一维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","
  • 转载:...Java空字符串与null的区别 1、类型 null表示的是一个对象的值,而不是一个字符串。例如声明一个对象的引用,String a=null。 “”表示的是一个空字符串,也就是说它的长度为0。例如声明一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 726,414
精华内容 290,565
关键字:

java定义空字符串

java 订阅